A3-1

C-Helper を用いた Web ベースの C 言語開発環境の構築
Construction of a Web-based C Programming Language
Development Environment using C-Helper*1*2

島川 大輝 , 香川 考司*1*2
Daiki SHIMAKAWA , Koji KAGAWA*1 香川大学院工学研究科*1Graduate School of Engineering. Kagawa University*2 電子情報工学科*2Faculty of Engineering. Kagawa University
Email: s15g467@stu.kagawa-u.ac.jp
あらまし：学習者が初めて C 言語を学ぶとき，最初はコンパイル時のエラーや警告を理解するのに時間がかかる．初心者によくある間違いに対して，よりわかりやすいエラーメッセージを出力することにより学習効率が向上すると考えられる．Eclipse のプラグインである C-Helper という初心者向けの静的解析ツールを利用した．Web ベースシステムを提案し，よりわかりやすいエラー内容を出力するシステムを構築した．
キーワード：静的解析ツール，C 言語開発環境，Web ベース，C-Helper，プログラミング学習

1.

はじめに学習者が C 言語を学ぶとき，最初はコンパイル時のエラーや警告が何を意味しているのかわからず演
習中四苦八苦して時間だけが経過することが多々ある．エラー内容を見て何行目のどこがどう違うのか，すぐにわからないもの，例えば，全角のスペースが入っているとおかしな箇所にエラーがでたり，一部分だけのエラーが他の部分までエラーを表示してしまっていたりするとエラー箇所を直すことが困難である．また出力されたエラーのことをまた調べるのも手間である．徐々にプログラミングを学習するにつれて慣れていくとはいえ，学習の最初でつまずいていてはプログラミングに対して苦手意識がでてくる．この苦手意識がその後のプログラミング学習に影響する可能性がある．初心者によくある間違いに対して，よりわかりやすいエラーメッセージを出力することにより C 言語の苦手意識を生み出す原因を減らすことができ，学習効率が向上すると考えられる．

2.

C-Helper

本シス テムでは， Eclipse のプラグインで ある
C-Helper [1] を利用する．C-Helper とは Eclipse のプラグインのＣ言語静的解析ツールである．おもにプ
ログラミング初学者が間違いやすい項目を検査し，警告を表示する．可能であれば修正案も提示する．
検査項目は以下のとおりである．
・char 型変数への文字列の代入
・警告を抑え込むキャスト
・ヘッダファイルでの実態定義
・識別子の重複・インデントの乱れ
・メモリリーク・printf のパラメタ間違い・scanf への値渡しミス
・構造体宣言のセミコロン忘れ・関数定義の余分なセミコロン
・動的に確保した配列に対する sizeof
・定義されていない関数名の使用
これらの機能を一部抽出して Web ベースで利用できるようにする．

3.

システムの概要

C-Helper の機能を使うことでプログラミング初心者が犯す間違いを見つけ解決策を提案する．これによって C 言語プログラミングに対する苦手意識が生まれることなく学習することが可能になる．しかし，Eclipse は初心者向きの開発環境ではない．そこで C-Helper の機能を Web ベースで利用できるようにする．
本研究のシステムは，ブラウザ上のテキストエリアの入力フォームに入力されたソースコードを文字列として受け取り，受け取った文字列(ソースコード) を C-Helper の機能を使い解析し，結果をブラウザ上に出力するサーブレットプログラムである．そのためにまず，C-Helper をサーブレットで使えるよ
う変更を加える．C-Helper は元が Eclipse のプラグインで，Java で書かれているため可能ではあるが，プラットフォームに依存しているライブラリやそのライブラリを使用しているメソッドを書き換える必要がある．それらの修正を行った．以下にシステムの概要図を示す．

― 155 ―

教育システム情報学会 JSiSE2015
第 40 回全国大会 2015/9/1～9/3

図 1 本システムの概要図

4.

移植における問題点

Eclipse のプラグインから Web ベースのシステムに移植する場合，SWT，JFace などのライブラリに依存している部分を取り除かなければならない．ライブラリをそのままサーバ側に持ってきて使用することもおそらく可能ではあるが，サーバ側からウインドウが表示できないなどの動作環境の違いによる不具合が起こる可能性がある．この二つのライブラ
リを使用しているクラスやメソッドに修正を加えた．

5.

システムの実装

本研究では，インデントの乱れを検査する機能を
Web ベースで実装した．まず，テキストエリアにソースコードを入力して送信すると，C-Helper のソースコードを解析するクラスに送り，解析結果を文字列として受け取りクライアント側に出力するサーブレットプログラムを実装した．また，ソースコードをそのまま出力する際に，ただ出力するのではなく，
CodeMirror[2] を利用し，強調表現を加えた．さらに
CodeMirror に addon を加えることにより CodeMirrorの機能を拡張した．mark-selection.js ファイルを読み込むことで、行の背景色を変更することが可能になり，エラーのある行には，背景色を変えるようにさせる．システムの図を下に示す．

図 3 本システムの動作 2

6.

まとめ

本研究では，プログラミング初心者向けのC-Helper を用いた Web ベースシステムの提案と構築を行った．C-Helper のインデントの乱れを検査する機能を Web ベースで実装することに成功した．また，Web ベースで実装しているため今後の C-Helper以外の機能の拡張性も十分にある．他の機能については未対応だが，C-Helper のソースコードを見て判断したところ，他の機能も Web ベースで実装することは可能であり，今後，機能を拡張していくことに問題はないと考えている．
しかし，今回の結果から言うと，C-Helper の機能を Web ベースにしたことが主であるが，Web ベースシステムの拡張性がある利点を生かしきれていな
い．他の Web ベースシステムとの連携や Web ベースならではの機能の実装など Web ベースの利点を生かした機能を実装していく必要がある．他の Webベースの学習支援システムとの連携の課題としては，他システムから本システム，または本システムから他システムを起動し，そのシステムが利用しているソースコードを本システムへ送信するといったシステム間でのファイルまたはテキストの送受信の仕組みを構築する必要がある．具体的に挙げると，プロ
グラミング演習で自動採点されたソースコードが間違っていた場合に，本システムへのリンクをメッセージに自動追加したり，本システムでの解析結果に応じて，それぞれのエラーに合った学習用の Web ベースデバッガーを呼び出したりすることを考えている．
参考文献(1) サ イ ボ ウ ズ ・ ラ ボ ユ ー ス ， Kota Uchida: “ C-Helper
GitHub”, https://github.com/uchan-nos/c-helper（2015）(2) Pavel Astakhov:“CodeMirror”, http://codemirror.net/（2015）

図 2 本システムの動作 1― 156 ―