enjoy Development

ソフトウェア開発プラットフォーム SOLID

LLVM/Clangの可能性にゾクゾクした SOLID 担当エンジニア 佐藤 大介
SOLIDという新しいプラットフォーム。
“SOLID開発の中心的メンバーに、SOLIDの意図や目的、
今後の進化について聞いた”

はじまりはLLVM*

初めてLLVM/Clangを知ったのはいつですか?

入社1,2年目の2008年頃、イリノイ大学の中でオープンソースソフトウエアであるLLVMが研究されていて、日本のオタクの間でも盛り上がっていました。当時LLVMに関してLife Long Optimization (いつでも最適化できる)という凄い目標の論文が出ていたのでそれに大変興味を持ち、カンファレンス等に参加するようになりました。LLVMの活動に注目していたところ、レポジトリの開発者メールアドレスがいつの間にか@apple.comに変わっていて、「あ~、この人Apple社に入ったんだなぁ」と思っていたら、LLVMがiOSの開発環境として採用されたんです。Clangプロジェクトがオープンソース化されたのは2007年ですが、Clangの名前が知れ渡って急激に広まってきたのはそのころ、2010年頃からじゃないかと思います。

LLVM/Clangのどこが凄いと思ったのでしょうか?

きれいにモジュール化されて作られているオープンソースなので、各々の機能をブラッシュアップしやすいし、新しい機能追加が比較的容易にできるところです。僕らの得意分野であるテスト支援機能やデバッグ支援機能の強化等も、自分たちでできますからね。またオープンソースのコミュニティに主要な企業が参加している点でも、更なる進化が期待できると思います。ちなみにARMの64bit版コンパイラは、ARM社の人たちが最初から参加してLLVM/Clang版が開発されました。

開発者の悩み、ツールベンダーの覚悟

LLVM/Clangのポテンシャルの高さは開発者に恩恵をもたらすことができますか?

今お話しした機能拡張に対する自由度の高いLLVM/Clangを実際にソフトウエア開発者が利用する場合、現実には「ふたつの壁」が存在します。ひとつは、開発者は限られた時間、限られたリソースで早く確実に製品をリリースしなければいけないので、使い慣れた実績のあるツールを変えるリスクをとりづらいことです。ふたつめは、LLVM/Clangの持つ解析機能を使いこなすには、開発者自身がツールの仕組みを理解したうえでプログラムに解析機能を有効にするためのコードを埋め込まないといけないところです。開発者が本来目的としている機能以外のコードを書く手間をかけられるか、というとそれは難しい。

ツールベンダーとして開発環境をよくするために、“コードを埋め込む”という課題にも取り組んだのですね?

はい、やはり僕らはツールのプロですから、僕らが責任もってコードを埋め込む。そこに一歩踏み込む覚悟で臨まなければいけないと思いました。そして実装の点では、例えばテスト機能のアドレスサニタイザ**のようなエージェントを、予め動いている状態で開発者が使えるように、ツールとOSを一体化したプラットフォームを丸ごと提供することにしました。開発者はツールのデバッグ支援機能の使い方を習得するのではなく、使いたい機能を選ぶだけ。あとはツールが自動的に組み込んだデバッグ支援機能が、プログラム実行中に不具合箇所をどんどん教えてくれる。困る前にツールがミスを教えてくれる、そんなクールな仕掛けを作り込むことができました。

社内で反対意見などはありませんでしたか?

LLVM/Clangに注目し始めたころから、社内では「面白そうだから、よ~く見張っておけ」という雰囲気はずっとありました。オープンソースであるLLVMの機能を、当社のデバッガに組み込んだ実績もあります。SOLID-IDEとしてVisual Studioを導入するときも、今までの当社のデバッガの「顔」と大分違うので、ベテランの(笑)開発者からはとっつきにくいという反応もありましたが、それも使いやすさを体験しているうちに皆推進派に変わっていきました。それにVisual Studioはゲーム業界のプログラマーの間ではデファクトになっていたという背景も後押ししたと思います。イケてるIDEだな、と。

CPU性能、メモリ容量のボーナスを
品質向上に活用する

アドレスサニタイザのようなデバッグ支援機能を使うと、ユーザープログラム以外のコードが走ったり、メモリを余計に消費しますが、それに対する懸念はありませんか?

そこは、あまり問題にならなくなってきていると思います。実際にCPUの動作周波数は日々高速化していますし、使えるメモリ容量も大きい。
目標性能に対する余裕があるなら、その余裕を品質向上や、日程通りに開発するという最も重要な課題に使うべきではないでしょうか。

SOLIDは進化し続けるのですね?

はい、まだ計画中の開発支援機能がたくさんありますので、楽しみにしていてください。もちろん、開発者の方々から「こんな機能はできないのか?」というご要望をいただければ、ツールベンダーとして知恵を絞って実現していきたいと思います。
LLVM/Clangを選んだのは、そんな将来性が楽しみだからなんです。
まあ、最近はコミュニティが活発過ぎて、メーリングリストとか追っかけるのが大変になってきてるんですけどね(笑)
* LLVM: Low Level Virtual Machine
** アドレスサニタイザ: アドレスエラーを検出する、ユーザーコードに組み込まれた
ライブラリ(文中の社名、製品名は各社の商標です)

※本サイトに掲載されている製品の価格および仕様は、製造・販売会社が何ら債務を被ることなく、
予告なしに変更されることがあります。商品名、会社名等は一般に各社の商標または登録商標です。