2015/07/08 14:00
「護衛艦の構成管理にGitを使いたい」――厳しい制約の中、進化する護衛艦システム
「護衛艦プログラマー」として活躍中の三菱スペース・ソフトウエア株式会社の中島康貴さん。前編では、護衛艦のシステムとは一体どういうものか、何ができるのかについて伺いました。後編では、厳密でありながら最新鋭な護衛艦システムの開発と改修を、実際どのように行っているかについて迫ります。
護衛艦システムの共通化のために、Gitも使ってみたい
――護衛艦システムの開発はどのように進められているのでしょうか。
システム要件が決まると、ハードウェアで実現するもの、ソフトウェアで実現するものに振り分け、それぞれの仕様が確定します。その後は、社内で標準化された開発プロセスに従い、要求分析、設計、製造、試験を行います。要求分析と試験はお客様にも見ていただき、結果の承認をいただきます。
――近年、アジャイル開発が浸透してきていますが、護衛艦のシステムではどういう開発手法を採用していますか。
高い機密性が求められ、法律でもいろいろと縛りの多いシステムなので、アジャイル開発というわけにはいかないんですよね。厳密に品質を担保するために、しっかりと要件定義を行い、仕様を決めてから、ウォーターフォールで計画・設計に基づいて緻密に組み立てていきます。
――どのようにして品質を担保していますか。
開発プロセスやUML(オブジェクト指向のプログラムの設計に用いる、グラフィカルで統一的な言語)が社内で標準化されていて、それに基づいて定量的な管理を行っています。たとえば、設計段階では細かく社内の有識者のレビューを受け、フェーズごとに規定の品質データを収集して品質管理部門に分析してもらいます。基準を満たさなければ次のフェーズに移行できない仕組みです。品質の他にも、コスト・進捗状況・リスクなども同様に管理しています。
――管理の方法において、最近になって変わってきた点はありますか。
はい。管理プロセスについても常に改善が行われ、進化し続けています。最近では、収集したデータをもとに、将来予測の仕組みを取り入れようとしています。たとえば、開発中の品質データから製造フェーズで発覚する異常を予測できれば、事前に対策を立てられるようになるでしょう。
――厳密な中にも効率化を図ろうとする動きがあるのですね。他にも改善していきたいことはありますか。
ドキュメントやソースなどの構成管理はツールを用いていますが、プロダクトライン全体の管理となるとまだまだ手動がメインです。かなり複雑で手間もかかるし、船がたくさんあるので、構成管理ツールにGitを組合せたらどうか、なんて考えているところです。このようにして、システムの基盤を共通化することにより、システムの拡張性や移植性を高めつつ、品質向上を図っています。
改修のコツは、ソースコードからプログラマーの意図を読み取ること
――中島さんは現在、ソフトウェアの改修業務を担当されているとのことですが、具体的にはどういうことをしているのでしょうか。
現在運用中の防衛システムへの機能追加や、ユーザーインターフェイスの改善などを行っています。パッケージソフトのバージョンアップによる機能追加と同じです。
――改修は頻繁に行われているのですか。
護衛艦に搭載されている武器や装備が変更される際など、必要に応じて行います。こちらから「ここを改修するとよくなる」と提案することもあります。だいたい数年から10年ほど前に開発されたものが対象なんですが、自分で開発したものを改修したこともありますよ。
――自分が書いたコードの改修とは、不思議な感じがするでしょうね。
ええ、学生時代に書いたレポートを読み返すようで、見るだけでも恥ずかしかったですよ(笑)。とはいえ仕事ですから、同僚にも「ここを直しておいてくれる?」なんて素知らぬ顔をして依頼しました。逆にコードの癖を見て、メンバーの誰がつくったのか想像したり……。
そうしたことも含めて様々な人が書いたプログラムの、異なるアルゴリズムの考え方や、他の人が見て理解しやすい書き方に触れるのは勉強になります。複雑な状態遷移をシンプルな条件分岐で表現していたりすると「スゴイなあ」と。自分もそんなわかりやすくスマートなコードを書きたいですね。
――プログラマーの間で『リーダブルコート』という本が人気ですが、そこに書かれている「読みやすいコードを書こう」というメッセージと通じる点がありますね。
重要だと思います。チームではコメントやインデント、変数や関数の名前のつけ方などを決めています。さらに改修の際には、プログラム開発時に策定されているコーディング規約や命名規約などを参照して継承します。ルール化することで、誰でも一定の「読みやすい」プログラムを書けるようにしているんです。
でも、個人的にはプログラムの内容以上に「プログラムを書いた人の意図」を読み取って、理解することが重要だと考えています。それによって「何を実現しようとしているのか」が明らかになり、的確な改修ができるように思います。
――護衛艦システムの改修で最も気を使う部分はどこですか。
改修による影響範囲の調査でしょうか。納入後もお客様の手で長期間試験される開発時と異なり、改修後はすぐに運用されるため、既存機能へ何らかの影響があると大問題です。そこで改修対象と周辺の依存関係を調査し、影響の有無を確認します。
それから、開発時の設計思想を継承するために、もともとのプログラムの現在の動作や性能要件に立ち戻って確認することも重要です。開発時の設計資料を参考に、ソースコードを調査したり、動作させてみたりして確認します。
――改修範囲と改善効果の測定、判断は何が基準になるのでしょうか。
うーん、それを定量的に測定する基準は今のところないんですよ。エンジニアとしての経験が頼りです。また、チームでは、有識者によるピアレビューを行い、経験の平準化を行っています。
「パパが造った船だよ」と言ってみたい
――中島さんが、業務を通じて最も満足感を得られる瞬間はどんな時ですか。
実際にシステムを使う方に「使いやすくなった」と言われることです。なかなかエンドユーザの方と直接お話できる機会が少ないのですが、それだけに満足していただける機能を造れた時は達成感があります。
――大きな護衛艦が海の上を進む姿は壮観ですよね。
そうですね。実は私も「亡国のイージス」など、護衛艦が登場する映画はついつい観てしまいます。もともと子どもの頃から「ガンダム」のファンで、物語の中でモビルスーツを開発する「アナハイム・エレクトロニクス」のような会社に就職したいと思っていました。今思えば、護衛艦もある意味「大きなロボット」のようなもの。私が携わった護衛艦に娘を乗せて、いつか「パパがこの船を動かしているんだよ」と自慢したいです。
――防衛の分野では、最新鋭の技術が使われていそうですね。中島さんの中でお気に入りの技術があればお聞きしたいです。
ええ、近年だと護衛艦のレーダーに使われている「フェーズドアレイレーダー」は、他のものへの応用も期待されています。電波を重ねあわせて指向性を持たせる技術で、がん治療や宇宙エレベーターなどへの応用研究が既に行われているそうです。
逆に、世間一般の新しい技術を護衛艦のシステムに活用できないか、いろいろ妄想することもあります。たとえば、いま注目のウェアラブルデバイスも、ヘッドマウントディスプレイならモニターでは表現が難しい3次元の情報もわかりやすく表示できます。護衛艦に応用すれば、より正確な情報把握が可能になるかもしれません。
プログラミング×[未来]の答え
――最後に、未来のプログラミングは、技術者や一般の人にとってどういう存在になっているでしょうか?
プログラミングは「造る」ことより「何ができるか」で価値が決まるものではないでしょうか。ですから、個人的には、ディープラーニングなどの新しい技術により、プログラミングの自動化が進むことを期待しています。その時に必要になるのは、プログラムに何をさせるかを考える人。プログラマーの資質や職能も変わっていくのではないでしょうか。
――護衛艦のシステムは、いろいろと厳しい制約がありながらも、常に進化しつつ、最先端の技術をふんだんに取り入れているんですね。改修に向き合う姿勢は、他のプログラマーさんの刺激になるのではと思いました。今回はありがとうございました。
著:伊藤真美
写真:小倉亜沙子