3.「F-Sytem」の提案と実装

3.1 PullRequestを用いた開発ノウハウ共有支援システム「F-System」

Githubを用いた開発を行っている技術者を対象に,開発を行った際に使用した技術や知識といった開発ノウハウを元にフォーマットに則りプルリクエストを作成することで,チームや組織内で共有することができる情報システムを提案する.提案する情報システムは以下を満たすものとする.

・githubのリポジトリページのURLを入力することで,リポジトリ内の情報を自動で取得し,プルリクエスト単位での開発技術参照ページにすることができる.

・システム内からブランチを選択してプルリクエストを送信したり,指定のプルリクエストの内容を変更することができる.

・実装した内容をプルリクエスト単位でwebページからでも参照ができ,同じように実装することが出来る程度の情報がプルリクエストに記述されている.

・システム内から最新の情報をいつでも更新することができる.

これらを満たす情報システムにより前章の,プルリクエストを開発ノウハウ共有目的で利用する場合に新機能などの開発方法や実装手順が伝えきれてないという部分が解決できる.これよりチームや組織内で実装方法や開発時に得た技術的な知識などの開発ノウハウが共有ができるようになり,他の開発者は類似したものを開発する際に,既存の開発を参考にすることができるようになる.

本研究の開発に使用するツール

・PHP1

・Python2

・mySQL3

3.2 システムの構成

githubAPIを利用してgithubの情報を取得・編集する部分,取得した情報をデータベースに保存する部分,データベースの内容をwebページで表示する部分の3構成でできている.githubを利用する部分はPythonで実装し,webページの表示やデータベースへの保存する部分はPHPで実装している.各実装部分の説明は後の節で説明する.

3.3 githubの情報を取得・変更

PHPでURL入力フォームを作成する.入力されたgithubのリポジトリページのURL情報を元に,PythonからgithubAPIを用いてgithubの情報を取得してくる.Pythonを呼び出す際に指定するリポジトリはgithubの各リポジトリページのURLを入力してもらい,そこからリポジトリ名とオーナー名を取得して判断する.取得してくる情報は,指定のリポジトリNo,リポジトリの名前,リポジトリの説明,リポジトリ内のプルリクエストの数,各プルリクエストNo,プルリクエストの名前,プルリクエストのコメント文である.

変更をする場合,変更するプルリクエストを指定し,PythonからgithubAPIを用いてgithubの情報を変更する.変更する情報は,指定したプルリクエスト内のコメント文である.

3.4 PHPから取得,変更した情報をデータベースに書き込む

PHPからPythonのプログラムを呼び出し取得または変更した情報を,データベースを呼び出して書き込む.書き込むデータベースのテーブル内容は以下の表のとおりである.

3.4.1 テーブル名 RepositoryList

表3.4.1-1 リポジトリ情報を保存するデータベース

キー名 データ型 内容
ProjectID varchar(255) プロジェクト識別ID
ProjectName text プロジェクトの名前
概要 text プロジェクトの概要欄
User text プロジェクト作成オーナー名

表3.4.1-1ではRepositoryListのデータベースのキー名とデータ型と何を保存するかの内容が示されている.PrimaryKeyはProjectIDである.

3.4.2 テーブル名 PRData

表3.4.2-1 プルリクエスト情報を保存するデータベース

キー名 データ型 内容
ProjectID varchar(255) プロジェクト識別ID
PRID varchar(255) プルリクエスト識別ID
Title text プルリクエストのタイトル
実行環境 text ページに表示する実行環境内容
ページ内容 text ページ作成時の概要欄
実行画面 blob ページに表示する画像データ
実装方法 text ページに表示する実装方法
参考ページ text ページに表示する参考URL情報

表3.4.2-1ではPRDataのデータベースのキー名とデータ型と何を保存するかの内容が示されている.PrimaryKeyはProjectIDとPRIDである.

3.4.3 テーブル名 UserToken

表3.4.3-1 ユーザー情報を保存するデータベース

キー名 データ型 内容
UserName text githubのユーザー名
token text ユーザーのgithubtoken情報

表3.4.3-1ではUserTokenのデータベースのキー名とデータ型と何を保存するかの内容が示されている.

3.5 PHPでwebページの作成

PHPからデータベースを呼び出し,その内容を元にweb上で参照できるページを動的に作成する.ページ階層は,一番上がリポジトリ一覧のFront.phpでそこからリポジトリ登録のURLGet.phpと,githubにある最新情報へ更新するボタンのUpDate.phpと各リポジトリごとのページへ移動するRepositoryIndex.phpがある.RepositoryIndex.phpはProjectIDごとのページが表示されており,プルリクエストが送信できるPullRequestAction.phpと各プルリクエストごとのページへ移動するPullRequestIndex.phpがある.PullRequestIndex.phpはプルリクエストの内容が表示されており,内容を変更できるChangePullRequest.phpもある.

3.5.1 Front.php

Front.phpには図3.5.1-1のようにリポジトリ登録ボタンとリポジトリ一覧と更新ボタンがある.

図3.5.1-1 Front.phpのスクリーンショット

Front.phpからリポジトリ登録ボタンを選択後遷移する図3.5.1-2に示したURLGet.phpでは,githubのURLを入力するフォームと登録ボタンがあり,ここにgithubのリポジトリのURLを入力することでURLSet.phpへと情報を送信し,内部のGitHubDataSet.pyへユーザー名とリポジトリ名が送信され,そのリポジトリの情報をgithubAPIを利用して取得される.取得された情報はURLSet.php内でデータベースへと保存され,全てが正常に動作した場合に登録が完了しましたと表示される.URLSet.phpでは戻るボタンがあり,そこからリポジトリ一覧であるFront.phpへと戻ることが出来る.GitHubDataSet.pyで取得する情報としては,まずユーザー名とリポジトリ名を引数にRepositoryGet.py内の関数を呼び出す.そこからgithubAPIを利用してリポジトリのidとリポジトリのdescriptionを取得してくる.次にユーザー名とリポジトリ名を引数にPullRequestGet.py内の関数を呼び出す.そこからgithubAPIを利用してそのリポジトリ内の全てのプルリクエストのidとtitleとbodyを取得してくる.これらをテーブルRepositoryListとテーブルPRDataにそれぞれ保存する.

図3.5.1-2 URLGet.phpのスクリーンショット

次に図3.5.1-1にある更新ボタンではUpDate.phpへ遷移し,テーブルRepositoryListに入っている全てのUserとProjectNameを対象にGitHubDataGet.pyを呼び出す.呼び出されたプルリクエストの情報はテーブルPRDataのPRIDを参照に,新規のものをテーブルPRDataへ保存していく.全てが正常に動作した場合に更新が完了しましたと表示される.UpDate.phpでは戻るボタンがあり,そこからリポジトリ一覧であるFront.phpへと戻ることが出来る.

最後に各リポジトリごとのページへ移動するRepositoryIndex.phpは,テーブルRepositoryListに入ってる情報を元に動的に一覧が表示されている.Front.phpからRepositoryIndex.phpへはテーブルRepositoryListのProjectIDをデータとして送信している.

3.5.2 RepositoryIndex.php

RepositoryIndex.phpには図4.5.2-1のようにプルリクエスト送信ボタンとプルリクエスト一覧と一覧に戻るボタンがある.

図3.5.2-1 RepositoryIndex.phpのスクリーンショット

RepositoryIndex.phpからプルリクエスト送信ボタンを選択後遷移する図3.5.1-2に示したPullRequestAction.phpでは,プルリクエストを登録するユーザー名を選択するプルダウン,変更が実装されているブランチを選択するプルダウン,変更を取り込むブランチを選択するプルダウン,タイトル,実行環境,概要,実装方法,参考ページのそれぞれを入力できる入力フォーム,入力された情報を登録させる登録ボタン,ユーザーの登録ができるユーザー登録ボタンがある.

図3.5.1-2 PullRequestAction.phpのスクリーンショット

ユーザー名を選択では,ユーザー登録で登録されたテーブルUserTokenを元にプルダウンで選択できるようになっている.このユーザーを元にプルリクエストを送信する.変更が実装されているブランチと取り込むブランチでは,内部のBranchGet.pyへユーザー名とリポジトリ名が送信されそのリポジトリの情報を,githubAPIを利用して取得される.BranchGet.pyで取得する情報としては,まずユーザー名とリポジトリ名を引数にBranchDataGet.py内の関数を呼び出す.そこからgithubAPIを利用してリポジトリのブランチ一覧の情報を取得してくる.この情報を元にプルダウンで選択できるようになっている.登録ボタンでは,入力されている情報をPullRequest.phpへ送信している.PullRequest.phpでは送られてきた情報を元にPullRequestSend.pyを呼び出している.PullRequestSend.pyでは送られてきた情報を,githubAPIを利用してhtmlリクエストを送り,githubへプルリクエストを送信する.全てが正常に動作した場合に送信しましたと表示される.PullRequest.phpでは戻るボタンがあり,そこからプルリクエスト一覧であるRepositoryIndex.phpへと戻ることが出来る.ユーザー登録ボタンでは,図3.5.1-3のようなTokenSet.phpへ遷移し,ユーザー名とトークンを入力できる入力フォームと登録ボタンとgithub内のトークン取得できるページへリンクしているトークン取得ページがある.入力されたユーザー名とトークン情報を元にTokenRegist.phpを呼び出し,それらの情報をテーブルUserTokenへ保存される.保存が正常に終了した場合,登録が完了しましたと表示され,戻るボタンでプルリクエスト送信が出来るPullRequestAction.phpへ戻ることができる.

図3.5.1-3 TokenSet.phpのスクリーンショット

次に一覧へ戻るボタンでは,Front.phpへ遷移させるようにしている.

最後に各プルリクエストごとのページへ移動するPullRequestIndex.phpでは,Front.phpから引き継いだProjectIDと一致するテーブルPRDataに入ってる情報を元に動的に一覧が表示されている.RepositoryIndex.phpからPullRequestIndex.phpへはFront.phpから引き継いだProjectIDとテーブルPRDataのPRIDをデータとして送信している.

3.5.3 PullRequestIndex.php

PullRequestIndex.phpには図3.5.3-1のようにプルリクエストの内容変更ボタンとプルリクエストでの情報と一覧に戻るボタンがある.

図3.5.3-1 PullRequestIndex.phpのスクリーンショット

テーブルPRDataの内容を元にPullRequestIndex.phpではタイトルと実行環境とこのページでの内容と実装方法と参考ページ一覧を表示している.また,画像を保存出来る結果画面の項目もある.結果画面では,テーブルPRDataの実行画面に画像データが入っている場合はPictureShow.phpで表示し,画像データが入っていない場合は,画像登録フォームを表示する.登録フォームでは,画像のファイルを選択できる欄と登録ボタンがあり,登録ボタンからPictureSet.phpに情報を送信してテーブルPRDataに画像情報を保存できるようになっている.

PullRequestIndex.phpからプルリクエストの内容変更ボタンを選択後遷移する図3.5.3-2に示したChangePullRequest.phpでは,プルリクエストを変更するユーザー名を選択するプルダウン,タイトル,実行環境,概要,実装方法,参考ページのそれぞれを入力できる入力フォーム,入力された情報を変更させる変更ボタン,ユーザーの登録ができるユーザー登録ボタンがある.ユーザー名の選択プルダウンとユーザー登録ボタンに関しては前の節と同様である.

図3.5.3-2 ChangePullRequest.phpのスクリーンショット

変更ボタンでは,入力されている情報をChangeDataSend.phpへ送信している.ChangeDataSend.phpでは送られてきた情報を元にPullRequestChange.pyを呼び出している.PullRequestChange.pyでは送られてきた情報を,githubAPIを利用してhtmlリクエストを送り,githubへプルリクエストの変更内容を送信する.全てが正常に動作した場合に送信しましたと表示される.ChangeDataSend.phpでは戻るボタンがあり,そこからページ一覧であるPullRequestIndex.phpへと戻ることが出来る.

results matching ""

    No results matching ""