【ITコラム】システム開発のスピードアップの方法を考えてみた

IT事業本部のいもぽんです。この時期は体調を崩しがちですが、皆さんはいかがですか? 私はなんとか健康に日常生活を送っていますが、たくさん食べて寝て、体力をしっかりつけましょう!
さて、今回はシステム開発のスピードアップの方法について考える機会があったため、記事を書いてみました。システム開発を加速させるには様々な方法やツールがありますが、最近私が経験したものを中心に少し紹介できればと思います。
なぜスピードアップが必要なのか?
ビジネスではスピード感が重要だと言われます。
他社より早く事業を成功させれば業界で第一人者となり、知名度が大きく向上することでしょう。知名度の向上とともに、仕事がたくさん舞い込み、売上はうなぎ登りに上昇し、会社は大繁盛となり、ますます有名になって仕事が増え…の繰り返しで儲かりまくってウハウハ状態に。
ゆくゆくは豪邸を建てて、不労収入で安定した老後生活を…… などと妄想は膨らむばかりですよね。(笑)
これらを実現するために、とにかくビジネスにスピード感は重要なのです。
ところでスピード感って何でしょう?
スピード感ってなんだ?って偉い人に聞くと、
「そんなの世の中にサービスや製品を早く出すことに決まってるだろ!」
と速攻でお叱りを受けそうですが…ちょっと待ってください。
この「スピード感」を実現するのはそう単純な話ではないのです。世の中にサービスや製品が出てくるまでのライフサイクルはIT業界だと、おおよそ以下のフェーズに分類されます。
- 企画
製品を作る前段階の調査等を行うフェーズ。 - 設計/製造
実際にモノづくりを行うフェーズ。 - 販売/サポート
作った製品をエンドユーザへ届け、サポートするフェーズ。 - 廃棄
製品の提供終了に伴う処理を行うフェーズ。
さて、エンジニアがスピードアップを図るとしたら、具体的にどのフェーズをスピードアップすることが可能でしょうか。
販売/サポートや廃棄は開発部隊とは異なる方々が担当する場合が多いため、エンジニアの人は企画と設計/製造をスピードアップしましょう。
工程毎のスピードアップについて考えてみる
企画フェーズのスピードアップ
新しい技術を使ったプロジェクトの場合、企画フェーズの中でPoC(概念実証)を行う場合があります。PoCでは複数回実施する「試作」は重要かつ時間のかかる作業です。
お客様に資料だけでプロジェクト内容を説明するのも悪くないのですが、実際に動くモノがあると説得力が上がります。例えば企画を提案するお客様に対して競合数社の引き合いがある場合に、金額や信頼など諸条件が他社と均衡している場合、試作品が実際に動く様子を見せれば大きなアピールになります。
お客様からすれば試作品は完成のイメージが湧きますし、なにより実際に作る能力があるとアピールできます。
企画フェーズでは一般的に設計/製造フェーズより割ける時間がなく、場合によっては「明日、〇〇社に提案しに行くからちょっとプロトタイプ作ってよ」と言った指示が出たりするものです。
短時間で試作品を作る開発速度が大切になります。
そこで、少ないコーディングで多くの機能を簡単に実装できるツールが使えるとエンジニアとしての武器になります。
設計/製造フェーズのスピードアップ
設計/製造フェーズはまさにモノづくりそのもので、開発速度がスケジュールに大きく影響します。
また開発速度だけでなく品質も当然求められます。
コーディング量が少なければバグの入り込む割合も必然的に減りますし、機能が多ければ外部フレームワークの選定などの時間も不要となるため、短時間で品質の安定した開発が可能です。
最近使ったスピードアップできそうなモノ
実際に、最近私がスピードアップを体感できたモノを1つ紹介いたします。
Pythonというプログラミング言語
Pythonというプログラミング言語はご存知でしょうか? 最近、私はPythonを利用してコードを書く機会があったのですが、Pythonはスピードアップを図る対策の1つの大きな選択肢だなと感じました。まず、Pythonの特徴は以下の通りです。
- スクリプト言語である
コンパイル不要で実行可能。 - ソースコードがきれいに書ける
Pythonの言語思想はシンプルさ。C言語系の言語と比較すると比較的ソースコードが短い。言語の規則でブロックとする箇所にインデントが入れないとエラーとなるため必然としてソースコードの可読性が高くなる。 - ライブラリが豊富
追加不要の標準ライブラリや機能があり、外部ライブラリとしては、機械学習のTensorFlowやディープラーニングのChainerなどの有名なライブラリが多く存在する。
パッケージ管理されており、簡単にインストール可能。描画関連やWeb関連もあるので分野問わずPythonで開発可能。
ざっとこんな感じなのですが、いろいろな用途に対応できるのにとてもシンプルにコードが書けて実行も簡単にでき、非常にスピーディーに開発できてしまいます。
Pythonの活用例:データ取得から見える化まで
Pythonの主な用途ですが、例えば企画フェーズでは、提案資料に必要なデータを集めて集計してグラフにすることがあります。データ会社からきれいな状態のデータを入手できればよいですが、必ずしも欲しいデータがきれいな状態であるとは限りません。
情報公開されているデータがHTMLのみ、というケースは今でも多くみられます。そこで、HTMLデータを取得してCSV形式やXML形式などのデータに落とし込み、見える化できれば提案資料に使えそうです。
今回、私が実際に作ってみた簡単な例として、弊社のホームページ(2020年3月5日時点)の「ヘルパーステーション検索」ページの事業所一覧を取得してCSV形式に変換するPythonのプログラムをお見せします。
import requests from bs4 import BeautifulSoup import csv r = requests.get('https://www.careritz.co.jp/stations/') soup = BeautifulSoup(r.content, 'html.parser') items = soup.find_all('article') with open('stations_list.csv', 'w') as f: writer = csv.writer(f) for item in items: name = item.find('a', 'name') types = item.find('a', 'types') access = item.find('a', 'access') writer.writerow([name.text, types.span.text, access.span.text])
簡単に説明しますと、ライブラリは標準のHTTPライブラリのrequests、CSVライブラリのcsv、外部ライブラリでHTML等のパーサライブラリのBeautifulSoup4を使用しています。
処理としては取得対象であるヘルパーステーション検索のURLを指定してHTMLを取得し、取得したHTML内から事業所名/種別/住所を抜き出してCSVへ出力しています。
このようにWebから意味ある情報を抽出することをWebスクレイピングと言います。Webスクレイピングの際は対象となるサイトの利用規約を参照し、過度の負荷をかけないように細心の注意を払って実施してください。

弊社事業所の所在地をプロットした地図
このようにHTMLの雑多なデータをCSVファイルへ出力できると、応用方法が広がります。
例えばGoogle Mapsのマイマップ機能を使い、取得した事業所を地図にプロットして見える化することが容易です。それもPythonでコードを書くと、こんなに簡単にできてしまうのです。
最後に
今回はシステム開発のスピードアップ=効率化について考えてみましたが、ツールや方法は適材適所です。
今回ご紹介したPythonはあくまで一例ですので、ほかにも各人や環境に合ったツールがあると思います。目的が違えば別のツールや方法を使うなど、1つにこだわらず状況によって使い分けるのが重要です。
現状のツールや方法に不満があり、ほかに何か良いツールがないかなと思い始めたら、それはツールを変えるキッカケです。
みなさんも何かを作る時には、是非スピード感について考えてみてください。