プログラムの部品同士のつなぎ方を考える
—C言語のモジュールを活用する新しい概念—

コンピュータ理工学部 コンピュータサイエンス学科 荻原 剛志教授

C言語のモジュールを活用する新しい概念

 生活の中でコンピュータの必要性が高まるにつれて、そのコンピュータを動かすためのソフトウェアもたくさん必要になってきます。ソフトウェアを作るとき、モジュール(部品)とモジュールとをくっつける役目を担うのが「グルーコード」と呼ばれるプログラム。荻原剛志先生は、グルーコードを簡略化したり、不要にしたりすることで、ソフトウェア開発の効率をもっと高められると考えて、研究に取り組んでいます。その具体的な方法についてお話を伺いました。

モジュール同士をくっつけるプログラム

 今や、身の回りにたくさんのコンピュータが働いている時代になりました。「僕はパソコンも携帯電話も使わないよ」という人でも、炊飯器や冷蔵庫といった一般家電に組み込まれているコンピュータを知らず知らずのうちに利用しています。

 これだけコンピュータが大量に動いているということは、それに応じた大量のソフトウェアが動いているということでもあるのです。ソフトウェアはコンピュータを作ったら自動的に付いてくるものではなく、システムエンジニアやプログラマなど「人の手」によって生み出されています。

 人の手による作業ですから、すべてを完璧に作り上げるのは容易なことではありません。プロジェクトによっては予算や時間をかけられないこともありますが、作ったソフトウェアは正しく動作しなければ価値がありません。

 現在のソフトウェアの開発現場では、すでに出来上がった「モジュール」と呼ばれるソフトウェアの部品を組み合わせることで、すべてをイチから作り出すことなく、新しいソフトウェアを作ることが少なくありません。これらのモジュールは、他の会社の開発したものであったり、別の開発プロジェクトで作成したものの再利用であったりしますが、モジュール単体ではすでにきちんと動くことが確認されているため、組み立てのミスさえなければ、より正確で効率的に新しいソフトウェアを作ることができます。

 このとき、プログラマが作るのはモジュール同士をつなぐための「グルーコード」と呼ばれるプログラムです。モジュールとモジュールとをくっつけるための糊(グルー)という意味でこう呼ばれています。

モジュールを使うためにはグルーコードというジレンマ

 いかに単体のモジュールが間違いなく動くことが分かっていても、現在のようにソフトウェアを作るためのプログラムが膨大な大きさになってくると、グルーコードを作ること自体が膨大な作業となり、そこにミスが起きる余地が出来てしまいます。

 そこで、最近はグルーコードをあまり記述しなくても済むような機能を備えたソフトウェア開発手法が考えられるようになってきました。しかし、現在のソフトウェア開発でもっともよく使われているC言語というプログラム言語には、そのような手法が使えません。特に日本が得意とする組み込みソフトウェアにおいてはC 言語で開発されるソフトウェアが多く、当然再利用するモジュールもC 言語であり、プログラマはC言語のグルーコードを作る必要があるのです。

 過去のモジュールの問題だけではなく、プログラマが新たに開発言語を覚えるのはたいへんな時間と労力がかかります。開発方法のために人間が苦労するのではなく、人間が作業しやすいように開発方法を変えるほうが遙かに効率がいいのです。

グルーコードをなくすための工夫

タップ
図1
図2

 C言語はそのまま使いたい、けれどもグルーコードは減らしたい、という相反する希望を叶えるため、私はC言語に「タップ」という概念を持たせることを提案しました。

 タップは、モジュール間で共有する変数と、共有変数が変更された時に起動する手続きから成っています。タップはそれぞれのモジュールの中に設置され、あるモジュールが値を変更すると、共有している他のモジュールに通知が送られます。通知を受け取ったモジュールはタップに記述されている手続きを実行します。(図1)

 図2のソフトウェアは、スライダーやテキストフィールドに入力された数値をグラフに変換するものです。スライダーやテキストフィールドの入力によってグラフを動かせるだけではなく、グラフをマウスなどで変形させるとスライダーやテキストフィールドも変わります。

 このようなソフトウェアを作るとき、従来の方法では、スライダーのモジュール、テキストフィールドのモジュール、グラフのモジュールをつなぐため、数値を管理するだけのグルーコードが必要でした。このグルーコードは、ただ数値を管理して3つのモジュールと数値をやりとりするだけで、自分自身は表示したり、グラフを描いたりすることはありません。

 同じソフトウェアを作る場合にタップを導入すると、グルーコードをなくしてシンプルにすることができます。この程度の単純なソフトウェアであればグルーコードはまったく不要になります。

 タップを用いて各モジュールが作られていれば、グルーコードによる間違いを大きく減らすことができるだけではなく、さらに新たなモジュールやデバイスをこのソフトウェアに付け加える場合にも、グルーコードを作り直す必要がなく、ほとんどそのままくっつければいいというメリットもあります。

 このような新しい発想のことを「コンポーネント指向」と呼びます。プログラミングにおけるコンポーネントは、コンポーネントステレオの各ユニットのように、追加したユニットに配線をつなぐだけで使えるようになる、ということからこう呼ばれます。タップは、C 言語でコンポーネント指向を実現するためのアイデアのひとつと言えます。

新しい仕組みがゴールではない

 私は、C言語のグルーコードをなくすための研究で、本学の研究費に続き、文部科学省からの科学研究費の交付を受け、タップを使ったプログラミングの試作に取り組んでいます。現在はまだ完成品とは言えず、たとえば「プログラムが動いている最中にモジュールをくっつけたい」という状況でもちゃんと動く仕組みを実現するなど、もう少し複雑なことができるように改良を進めたいと考えています。

 とはいえ、私たちの研究では「こんな仕組みを作りました」ということが最終的なゴールではありません。今まで難しかったことがどれほど簡単になり世の中に役に立っているかを示す必要があるのです。さらに、新しい仕組みを用いるプログラミングの考え方や、開発の方法論を提案することができればいいと思っています。

暗号であることにすら気がつかない暗号

 グルーコードの研究とは別に、深層暗号と呼ばれる暗号技術についても研究しています。

 深層暗号とは、現在のインターネットで使われている公開鍵方式の暗号とはまったく異なる暗号の仕組みです。盗聴している相手がいると想定した上で、見つかってもそれが暗号だと気づかれないという特徴を持っています。

 コンピュータ上での深層暗号としては、画像などの圧縮技術を逆手に取って、画像に情報を潜り込ませる方法が考え出されています。

 たとえば、長い文字の列を圧縮するとき、「ABCD」という部分をそのまま「ABCD」とするのか「R100」(ここでは「100文字前に出現した文字列の繰り返し」を意味するものとする)と圧縮するのか、どちらを選んでも情報量は4文字で同じです。この「情報量の変わらない部分を圧縮するのかしないのか」によって0か1かという1ビットの情報を持たせることができます。さらに潜り込ませる情報自体を暗号にしておけば、たとえ深層暗号ではないかと怪しまれても、なかなか気づかれることがないのです。

 深層暗号は、実は世界中で使われているけれども、方法を知られたくないため誰も特許を取らず学会発表もしないと言われています。まるでスパイ映画に出てくるようなミステリアスな暗号なのです。

アドバイス

難解な微分積分よりも暗号であることにすら気がつかない暗号数学パズルが好きな人

  情報系の学部への進学について「数学ができないとついていけませんか」という質問がよく聞かれます。多くの受験生の予想と異なり、実際には情報系の分野で高度な数学が必要とされる場面はそれほど多くありません。ですから、高校で微分積分が苦手だったからといって情報系への進学を諦めないでほしいと思います。ただ、数学的な考え方や発想力は重要です。数学パズルが好きな人やものごとを分析するのが得意な人、こういう仕組みを作っておけば後々楽になる、ということを普段から考える人に向いている分野だと思います。

コンピュータ理工学部 コンピュータサイエンス学科 荻原 剛志教授

プロフィール

工学博士。専門は情報学基礎、ソフトウェア工学。高校生のころは、まだパソコンが普及していなかったため、コンピュータ自体には興味がなかった。現代音楽が好きだったことから「コンピュータを使った作曲」に関心を持って大学では情報系に進学。勉強のためにソフトウェアを作り始めると面白くなり、そのままソフトウェアの道へ。そのときの経験から「合う、合わないはあるかもしれませんが、学問というのは、専門的に取り組むと何かしら面白いものがあるはず」と学ぶことの楽しさを説く。長野県上田高校OB。

PAGE TOP