見出し画像

シェルスクリプトにコンパイルする静的型付けスクリプト言語Cotowali

矢尾田 貴大(やおた たかひろ)

 矢尾田君は,モダンで書きやすい構文を持ちながら,シェルスクリプトに変換することで高いポータビリティを実現する静的型付きスクリプト言語Cotowaliの開発に取り組んだ.シェルスクリプトは古くから存在する言語で,最近のプログラミング言語とは異なった構文を持っていることから,若い人にとっては記述するのが難しく,生産性を低下させており,想定外の動作を誘発するバグの温床にもなっている.

 開発したCotowaliは,現代的なプログラミング言語に近い文法と機能を持ち,ポータビリティの高いシェルスクリプトへの変換を行うことで,書きやすい言語でありながらも高いポータビリティを実現する.また,最近のプログラミング言語で採用されていながらシェルスクリプトでは利用できなかった静的型検査の手法を採用することで,より安全でバグの少ないスクリプトを書くことが可能となる.未踏期間中に,以下のコマンド群を開発した.

  • lic:Cotowaliコンパイラ

  • lish:Cotowali対話環境

  • kuqi:言語サーバ

  • himorogi:Cotowaliインタプリタ(PoC)

 1つの特徴としてCotowaliコンパイラはV言語で記述されている.V言語は2019年に登場した新しいプログラミング言語で,未成熟ではあるが一定程度動作する.できたばかりのプログラミング言語ということで,実際にV言語を使用した例が少ない.Cotowaliは数万行単位のコードで構成されるが,この規模のV言語で書かれたソフトウェアは,V言語コミュニティが主導しているもの以外ではほとんど存在しない.Cotowaliの開発過程ではV言語のバグに多く遭遇したため,それらのバグは修正を行い,最終的には50を超えるV言語のバグがCotowaliの開発過程で修正された.

 シンタックスハイライトを含むエディタプラグインを提供するために,より発展的なエディタサポート機能である言語サーバKuqiを開発した.これにより,Visual Studio CodeやVimなどのソースコードエディタ上でエラー表示が行えるようになり,利便性が向上した.通常,エディタがプログラミング言語をサポートするためには,対象のプログラミング言語に対するサポートを実装する必要があるが,言語サーバを利用すると,エディタは言語サーバ仕様に対応するだけで,言語サーバを提供するすべてのプログラミング言語に対して機能を提供でき,プログラミング言語は言語サーバを提供するだけで,言語サーバをサポートするすべてのエディタに機能を提供できた.
Cotowaliで記述したFizzBuzzのソースコードを図-1に示す.

図-1 Cotowaliで記述したFizzBuzzのソースコード

 Cotowaliでは,ロゴのデザインの緻密さにもこだわっている.英文字フォントMontserratをベースに独自のロゴタイプをデザインし,ロゴマークは,漢字の「理」とカタカナの「コトワリ」を組み合わせてデザインした.印章をイメージした角丸の形状と,筆文字をイメージしたカタカナの「コトワリ」の部分の切り欠きは,シェルスクリプトの長い歴史を,漢字や仮名文字の歴史に見立てたものである(図-2).

図-2 Cotowaliのロゴマークとロゴタイプ

 未踏期間中からオープンソースでGitHub上に公開しながら開発を進め,ドキュメントやシンタックスハイライト等の周辺環境も整備し,当初は予定していなかったWindows環境に対応するためPowerShellバックエンドなども開発した.Hacker Newsに取り上げられ話題になった(https://news.ycombinator.com/item?id=30802186).GitHubスター数も534(2022年6月30日時点)を超え,カザフスタンからもプルリクエストが飛んできている(https://github.com/cotowali/cotowali/ ).

 Cotowaliを実際の業務プロジェクトへ適用することが今後の課題である.業務プロジェクトのセットアップやインストーラは複雑化する傾向にあり,いまだにシェルスクリプトが使われている現場では,気が付いたらシェルスクリプトが想定通り動かなくなって事故につながることもある.ポータビリティを重視するCotowaliを利用すれば,その問題を解決できる可能性がある.今後の継続的な開発体制の維持構築のため,Open Collectiveでスポンサー募集を開始している(https://t.co/rNSnqDv16S ).オープンソース開発者を継続的に支援する文化が日本でも根付くとよいと考える.(竹迫良範PM担当)

[関連URL]
https://cotowali.org/

[統括PM追記] 私には「まだCOBOL?」というのと似た感慨がシェルスクリプト言語にはある.あまり仲良くなりたくない.この問題をCotowaliがやっと解決してくれそうだ.しかも,まだ少々不安定なV言語を使って相当に大きいプログラムにしたというのが素晴らしい.開発中にV言語のバグを50個見つけたという紹介があったが,昔似たような体験をした私には,何かゲーム感覚で開発をしていたのかな,と思えてしまう.Cotowaliのロゴにもそういった遊び心というか,余裕を感じる.
 システム開発の王道を歩くがごとく,周辺ツールをきちんとした形で整備しつつ前進しているところがなんとも頼もしい.きっと世界のデファクトにまで持っていけると思う.

(2022年6月30日受付)
(2022年8月15日note公開)