期間限定のソースコードを削除するツール「chiritori」をリリースしました

期間限定のソースコードを探して削除するツール「chiritori」をリリースしました。

https://github.com/piyoppi/chiritori

これはなに?

たとえば以下のようなソースコード index.html に対して

<html>
  <body>
    <h1>Hello World</h1>
    <!-- time-limited to="2024/02/15 12:00:00" -->
    <h2>Campaign until 2024/02/15 12:00</h2>
    <!-- /time-limited -->
    <!-- time-limited to="9999/12/31 23:59:59" -->
    <h2>Campaign until 9999/12/31</h2>
    <!-- /time-limited -->
  </body>
</html>

以下のようなコマンドを実行すると

chiritori --filename=./index.html

以下のような出力を得ることができます。

<html>
  <body>
    <h1>Hello World</h1>
    <!-- time-limited to="9999/12/31 23:59:59" -->
    <h2>Campaign until 9999/12/31</h2>
    <!-- /time-limited -->
  </body>
</html>

ファイルに書き出したいときは以下のようにします。

chiritori --filename=./index.html --output=./index.out.html

(意図しない出力によって入力されたソースコードを破壊する可能性もあるので、ファイルの上書きをする場合は必ずバージョン管理されているソースコードに対して実行したり、ファイルのバックアップを取得してから実行してください。)

chiritori では、デフォルト値として <!-- --> で囲まれた文字列をタグとして認識します。 time-limited タグの to 属性値が現在時刻以前である場合に、タグで囲まれた部分を取り除きます。

タグのデリミタ ( <!-- --> ) や、タグの名前 time-limited は変更できます。これにより、基本的にはプログラミング言語を問わずに利用できます。

たとえば以下のコード index.js に対して

function main() {
  console.log('Hello, World! 1');
  // -- time-limited-code to="2020-12-31 23:59:59" -- //
    console.log('🧹This code will be removed after 2020-12-31T23:59:59.999Z');
  // -- /time-limited-code -- //

  // -- time-limited-code to="2099-12-31 23:59:59" -- //
    console.log('📌This code will be removed after 2099-12-31T23:59:59.999Z');
  // -- /time-limited-code -- //
  console.log('Hello, World! 2');
}

以下のコマンドを実行することができます。

chiritori --filename=./index.js --delimiter-start="// --" --delimiter-end="-- //" --time-limited-tag-name="time-limited-code"

どういう実装になっているの?

概ね以下のような手順でソースコードを解析・処理しています。

  • タグやテキストを区別するトークン化処理を実行する(デリミタで囲まれた文字列をタグとしてマークする)
  • トークンに対してタグの名前や属性値をパースしてタグのツリーを得る
  • 削除処理にツリーを渡し、戻り値として削除位置と加工後のソースコードを返却する
  • 削除位置と削除後のソースコードからインデントや改行を取り除く後処理を行う

どうして作ったの?

プログラミング言語Rustを習得するにあたり、何かを作りながら学習したいという目的の達成のために作りました。

私はアプリケーション開発を経て各種技術を習得する傾向にあります。ある程度の容量のテキストファイルの整形をすることで、Rustの特徴である所有権やライフタイムを意識せざるを得ないような開発ができると考えて、このような題材にしました。 また、自分で実際に使いそうなアプリケーションであれば開発のモチベーションを維持できるという点も重要でした。

今後の開発

今後は以下のようにしていくかもしれません。

  • プログラミング言語Rustの習得をすすめ、コードをリファクタリングする
  • タグの種類を増やして機能を拡張する
  • GitHub Actionsのカスタムアクションを提供して、自動化ワークフローへの導入を容易にする

まだ生まれたてのアプリケーションなのでいろいろと安定しないこともあるかもしれませんが、ちまちま手を入れていきたいなと思っております。

ではでは。

このカウンタは @piyoppi/counter-tools を使っています。

クリックすると匿名でいいねできます。