![見出し画像](https://assets.st-note.com/production/uploads/images/138892442/rectangle_large_type_2_53f0d65b2d9a7ba178fd84fb7a2cfcb5.png?width=1200)
コンパイルすることの楽しさ
最近、ソフトウェアを自分でコンパイルするのに少しハマっています。
昔はコンパイルすると言っても、依存関係をダウンロードしたり、コンパイラの設定を細かく調整したりするのが大変で、手が出にくいものでした。少しでもエラーした場合は技術スタックを理解していないと太刀打ちもできないような状況でした。
しかし、最近はHomebrewのようなパッケージマネージャーが登場して、だいぶ楽になっている気がします。
(注:今回のブログでは、パッケージマネージャー(例:Homebrew)によるインストールプロセスの一環でコンパイルされるツールは対象外です。自分で明示的にコンパイルする必要があるツールを指しています。)
今回はいくつか自分でコンパイルしているソフトウェアの例を挙げつつ、そのメリットについて述べてみたいと思います。
例1: Vim
言わずもがなですが、Vimは30年以上前からあるテキストエディタです。多くのエンジニアに愛されているものです。歴史が長いのもあり、ありとあらゆるOSで使えるようになっています。
では、なぜ、自分はわざわざダウンロードしてコンパイルして使っているのかと言うと、なんてことはない話だったりします。
自分は安いWindowsのノートパソコンを1台持っていて、ときどき簡単な作業で使うことがあります。シェル大好き人間としてはWindows上であっても、Windows Subsystem for Linux(WSL)を使ってUbuntuを走らせています。
残念ながら、Ubuntuに標準で入っているVimは古く(8.x)、唯一、新しいVimを追っかけてくれていたメジャーなPPA(Personal Package Archive)も最近メンテナンスされなくなってしまったようです。
どうしてもVimを使いたい自分はVimをコンパイルして使うことにしました。
最初はうまくいくのか不安だったのですが、コンパイルは思ったよりも簡単で、今やGitHubからVimのソースコードをダウンロードしてビルドスクリプトを走らせるZshのシェルスクリプトを書いて半自動化しています。
例2: llama.cpp
2つ目の例はllama.cppです。
llama.cppはC++で書かれたオープンソースのライブラリ兼バイナリで、LLM(大規模言語モデル)を効率よく実行することでローカルマシン(手元のMacやPC)で動かすことができるようになるものです。元々はMeta社のオープンソース^open-source-llamaLLMであるLlamaの実装として始まりましたが、今や様々なLLMモデルをサポートしています。
ただ進化が早すぎるため、最新のLLMに関しては公式配布のバイナリでは追いついていないことがあります。
では、どうするか?もちろん、コンパイルします 😀
新しいLLMが登場して試したいと思ったときは、手元でllama.cppをソースコードからコンパイルして、LLMのパラメータを読み込ませて実行しています。ソースコードもちゃんとメンテナンスされており、コンパイルで困ったこともないですし、LLMもだいたい動きます。
なぜやるのか?
では、なぜわざわざ自分でソフトウェアをコンパイルするのか、と思われるかもしれません。確かに、公式のバイナリをダウンロードする方が簡単でエラーも少なく、速いです。
ただ、自分にとってはコンパイルするメリットをいくつか感じています。
役に立つ面
まず、他の人がどうやってコードを構成しているかを学べるところです。コードの構成、依存関係の扱い、ビルドプロセスの扱い方などを見ることになります。レポジトリを見ているだけでも学べる部分もありますが、実際にビルドしてみることで必然的により深く理解することができます。
もう一つの役に立つ面は、使っているソフトウェアに対する理解が深まることです。例えば、ドキュメントに書かれていないオプションや機能がある場合、ソースコードを見ることでその機能が何をしているのかをより詳しく理解できます。
上記のどちらも、ソフトウェア自体の理解が深まるのはもちろんですが、ご自身の開発にも適用できることや参考になることもあるので、メリットとして大きいと感じています。
楽しい面
もう1つのメリットは単純に楽しい面です。
例えば、最新の機能を使うことができます。上記のllama.cppの例でも述べたように、公式に配布されているバイナリなどにはまだ含まれていないような機能を使うことができます。特にllama.cppのように急速に進化しているソフトウェアではなおさらです。
また、自分が使っているソフトウェアに対して「自分がコントロールしている」という全能感があるのも楽しい面だと思います。何か自分でソースコードに手を加えることがないかもしれませんが、いつでも手を加えられる、という、なんとも言えない気持ちになります。
自分もこの楽しさのために、Vimを週に1-2回は最新の機能や修正を取り込んだものをビルドして使っています😄
ぜひ試してみてください
いろいろと書きましたが、まずは是非試してみてください。特に自分が使っているソフトウェアに対して試してみると、新しい発見があるかもしれませんし、楽しさを見いだせるかもしれません。