【プロジェクトの詳細】
自治体が業務で使用する統合型GISのパッケージ開発プロジェクトです。パッケージ販売元のクライアントと請負契約を結び、対象の工程は基本設計から結合テストまでとなっています。
※統合型GISとは地図表示や検索、計測などのGIS基本機能に加えて都市計画、道路、上水道、下水道、固定資産の主要業務機能を搭載したシステムを指します。
本プロジェクトで開発する統合型GISはOSSのみを組み合わせたWebシステムとなっており、元々有償の製品を使って開発されたデスクトップアプリケーションからのリプレイ版です。
サーバーサイドはPHPでフレームワークにCodeigniterを使用しています。DBはPostgresSQLで図形情報を扱うためにPostGISという拡張機能を使用しています。
フロントサイドは主にjQueryを使っていて、ClosureLibraryによるオブジェクト指向プログラミングを採用しています。地図関連の機能はOpenLayersを使っています。
段階的に主要業務機能を追加開発しており、基本機能側はクライアントの予算都合に応じて機能改善や機能拡充による比較的小規模な改修が断続的に発生している状況です。
【ポジション(担当業務)】
開発チームリーダーとして参画し、リーダー業務と開発業務を兼任し、クライアントに対する進捗報告やスコープの調整などの顧客折衝も担当しました。
その後は技術アドバイザーとしてレビューや実装方式の検討、クライアントからの問い合わせなどを現在担当しています。(プロジェクト継続中)
【主な成果】
①80人月規模の業務機能の追加開発にて開発チームリーダーを担当
自社内のリソース不足の都合で2つの協力会社(BP)に委託することになりましたが、それぞれ開発拠点が離れており、どちらのBPも本プロジェクトが初めての取引だったということもあり、開発スキルに不安要素がありました。そのため、特に初期の工程では成果物のレビューを徹底して行い、実装担当者のスキルに問題がないかの確認をしたり、自社で使用しているプロジェクト管理ツール(Redmine)にBPメンバーを追加し、進捗状況・課題・QAなどをタイムリーに共有するように工夫しました。類似の機能が多かったため、類似機能単位にクラスの継承や共通関数を用意するなど保守性を考えた実装になるように指示を出しました。当該業務機能の次期開発が既に見込まれていたので、開発初期に実装方針の認識を十分に合わせておくことが重要と考えました。
GISの知識を必要とする難易度の高い機能や重要な部分については私が自ら担当し、技術力でも貢献しました。GISの知識を必要とする部分では、次のような機能をOpenlayersを使って実装し、GISの知識を必要とせずに業務機能から呼び出し可能なコンポーネントを用意しました。(設計書込み)
1.図形(ポイント、ライン、ポリゴン)を描画する
2.図形(ポイント、ライン、ポリゴン)を編集(移動、回転)する
3.ライン、ポリゴンの頂点を編集する
4.アノテーション(注記)の一時描画
5.図形のハイライト表示
6.地図上のマウス地点にツールチップを追従表示
重要な部分としては業務固有の設定情報の定義・取得方法や業務メニュー、検索結果など、他の業務機能にも影響するため、クライアントと仕様を調整しながら作成しました。業務機能から呼び出されるため、クリティカルパスを意識して計画的に作業を進めるように気を付けました。
※次の2つの問題解決は私の所属する会社が開発を請負う前に他の会社が作っていた機能に対するものになります
②システムの根幹に関わる初期表示時のパフォーマンス問題を解決
初期表示時のリクエストを分析してネックになっている問題点を特定し、次の通り対応しました。
1.初期処理以外にサーバー処理を同期処理で呼び出している機能がある
初期処理1回で必要な情報を取得できるようにし、初期表示時に何度も同期処理を呼びださないように修正。
2.地図上にデータを表示するための大量リクエストに時間がかかっている
まずは個々のリクエストと全体の処理時間を把握して問題を特定しようと考え、サーバー処理にデバッグログを仕込んで分析しました。するとクライアント側でMAX6処理の同時リクエストを送信しているのにもかかわらず、フレームワークの仕様でセッションを更新する処理として扱われ逐次処理されていたことが発覚。セッションを更新する処理ではないため、並列処理をするように修正。
特に2.の問題はエンドユーザからクレームを受けていたため、クライアントが自ら対応していましたが、長期にわたって解決に至ることが出来なかったため、支援を依頼されたという経緯があります。並列処理化によって劇的にパフォーマンスが改善されエンドユーザにも満足していただき、クライアントからもバイネームで高く評価を受けました。
③地図移動を繰り返すと地図にデータが表示されるまでに時間がかかる問題を解決
エンドユーザーから上がった指摘で、実運用で多くのデータを扱う自治体の場合だと、1回の地図移動で100回以上のリクエストが送信されるため、連続的に地図移動を繰り返すと(許容範囲の操作)すぐに大量のリクエストが蓄積されてしまい最終的な移動地点のデータが表示されるまでに大きなラグが発生してしまっていた。リクエストのキャンセルに関する知見はあったため、地図移動後のリクエスト送信前に待機中のリクエストをキャンセルしてリクエストが蓄積されないように改修。最後に地図移動した際のリクエストを速やかに送信できる仕組みに改善しました。