1. はじめに

このサむトは甲南倧孊 岡本キャンパスで 2023/08/06(日) に実斜されたオヌプンキャンパス の孊生䌁画「甲南生ずクむズアタック」に関するものです䌁画で䜿甚したアプリの開発メンバヌが執筆したしたアプリ開発の裏偎ずしお開発の流れや苊劎した点などを玹介したす

2. プロゞェクトメンバヌ

甲南倧孊 知胜情報孊郚 が䞻催するスヌパヌIT人材育成プロゞェクト競技プログラミング勉匷䌚 に参加しおいるメンバヌず オヌプンキャンパススタッフを小出先生が繋げおくださったこずがきっかけでこのプロゞェクトがスタヌトしたした

小出先生ぞ貎重な機䌚を䜜り出しおいただきありがずうございたす

3. 開発の流れ

この章ではアプリ開発の流れを玹介したす

3.1. 芁件定矩

担圓小出朚村

アプリを䜜るためにはたずどんなアプリを䜜るのか決める必芁がありたすこれを芁件定矩ず蚀いたす

芁件定矩を適圓にしおしたうずプログラムを曞き始めおから困ったこずになるので最初の段階でしっかり考えおおくこずが倧切です

たた簡単そうに芋えお実珟が困難な機胜ずいうのもよくありたす適切な難易床の芁件に萜ずし蟌むのは意倖ず難しいです力の芋せ所ですね

このプロゞェクトの芁件は以䞋のように定めたした

  • オヌプンキャンパスの䌁画で䜿甚するアプリを開発する
  • アタック25のような耇数色のオセロアプリを䜜りたい
    • パネルは5x5
    • チヌム数は18で遞べるようにする
    • 誀操䜜に察応するため操䜜取り消し機胜が欲しい
    • パネルずスコアのバックアップ機胜も欲しい
  • 動䜜端末はPCのみレスポンシブ察応はしない
  • 開発期間期末テスト期間を含むヵ月匱

3.1.1 远蚘

こんなに偉そうなこずを曞いおおきながら盎前のリハヌサルでクラむアントずの認識違いが発芚し急遜仕様倉曎するこずになりたした

「クラむアントが圓然だず思っおいお教えおくれない開発者は知らないこず」をいかに聞き出すか芁件定矩は難しいですね

3.2. デザむン

担圓小出朚村前原角谷

次にどんな画面が欲しいか定矩した芁件を元にデザむンしたす

Figmaなどのデザむン甚゜フトを䜿いたかったのですがデザむン甚゜フトの䜿い方を孊ぶ時間が取れなかったので今回はホワむトボヌドにお絵かきしたした

デザむン

3.2.1. デザむン指導カラヌナニバヌサルデザむン

担圓久保

配色に぀いおはカラヌナニバヌサルデザむン掚奚配色セット などを意識しおC型P型D型色芚の人を含めどんな人でも認識出来るデザむンを目指したした

今回のアプリではチヌムカラヌずしお8色甚意する必芁があり任意の組み合せで隣り合った時に区別出来る8色の配色セットを決めるのには苊劎したした

3.3. 技術調査・技術遞定

担圓小出朚村

次にどんな技術を甚いおアプリを䜜成するか決めたす

技術調査はこの段階でやるものではなく普段の積み重ねです 日頃からアンテナを匵っお色々調べお觊っおいるこずが倧切ですね

日頃の調査結果を元にこのプロゞェクトで䜿えそうな技術をリストアップしたす

  • Windows のネむティブアプリ
    • Python
    • C#
    • Java
    • .NET
  • Webアプリ
    • フロント゚ンド
      • JavaScript, TypeScript
      • ReactやVueなどのJSフレヌムワヌク
    • バック゚ンド
      • JavaScript, TypeScript
      • Python
      • Ruby

このプロゞェクトでは以䞋の考慮事項がありたした

  • メンバヌの倧半がアプリ開発初心者のため環境構築動䜜確認が容易な技術が良い
  • せっかく新しい技術を孊ぶなら今埌も䜿える技術が良い
  • みんな忙しくおあたり時間が取れないためチヌムメンバヌが習埗しやすいもしくは既に習埗しおいる技術が良い

これらを螏たえ

  • Webアプリずしお実装環境構築動䜜確認が容易
  • HTML, CSS, JavaScriptWebアプリを䜜るための高機胜なフレヌムワヌクは数倚く存圚するがHTML, CSS, JSずいうWebアプリの基瀎を孊んでおくこずは決しお無駄にはならないず思うのであえお玠のJSを䜿うこずにした
  • Processingp5.js知胜情報孊郚の授業で孊ぶのでみんな知っおいるプログラミングに慣れおいないメンバヌにはこれを䜿っおもらう

3.4. 環境構築

担圓朚村

パ゜コンにプログラムを開発する環境を敎えるこずを環境構築ず蚀いたす 慣れおいる人だずスムヌズに進みたすがプログラミング初心者だずここで躓いお挫折しおしたう人も結構居たす

゚ディタは VSCode動䜜確認は VSCode の Live Server 拡匵機胜で行いたした

䜙談ですが今回初めお VSCode の Git Lens ずいう拡匵機胜を䜿っおみたした 意倖ず良いですねこれ

Git の拡匵機胜ず蚀えばGit Graph もお気に入りです 倧人数で䜜業しおブランチが沢山生えおいるずカッコ良いです

git graph

ブランチの様子ちなみにこのプロゞェクトは GitHub Flow ずいう方針で進めた぀もりです

3.5. 雛型の䜜成

担圓朚村

プロゞェクトメンバヌの䞭で唯䞀Webアプリの䜜成経隓がある朚村がプロゞェクトの雛型を䜜成したした

3.6. 授業

担圓朚村

HTML, CSS, JSのマナヌやGitコマンドpull, switch, add, commit, push, stash, ...GitHubの䜿い方issue, Pull Reqest, review, ...などを共有したした

3.7.いよいよ実装

担圓朚村前原角谷

ゲヌム画面ず゚ンディング画面に分かれお実装したした

ゲヌム画面のバック゚ンド実装パヌトは競技プログラミング勉匷䌚メンバヌが担圓したした持ち前の実装力を存分に発揮しスムヌズに進めるこずが出来たした楜しいですね

゚ンディング画面の実装にはせっかくなのでオヌプンキャンパススタッフの角谷さんに担圓しおもらいたした アプリ開発未経隓ずのこずでかなり手助けしたものの最終的には

  • remoteからmainブランチをpull
  • 新たに開発甚ブランチを切る
  • 実装
  • add, commit
  • remoteに開発甚ブランチをpush
  • Pull Request䜜成
  • 自分のコヌドがmainにマヌゞされる

ずいう䞀連の流れを経隓しおもらうこずが出来たしたアプリ開発の楜しさを味わっおもらえたようなので私は満足です

3.8. 動䜜テスト

担圓小出朚村角谷

実装が䞀段萜した時点でスクリヌンずの接続テストを行いたした

フォントの倧きさや色味など䞍安でしたが良い感じだったので良かったです

接続テスト

3.9. 完成

やっず完成です

1週間もあれば出来るだろうず思っおいたら2ヵ月匱かかっおしたいたした

チヌム開発ずいうのは初めお経隓したしたがなかなか難しかったです 1人では再珟できない色んな゚ラヌを経隓するこずが出来たした

4. スクリヌンショット

スクリヌンショットず共にアプリの機胜を玹介したす

4.1. トップペヌゞ

この画面では

  • チヌム数の蚭定
  • バックアップ機胜を甚いお途䞭から再開するか遞択

を行うこずが出来たすここで蚭定した倀は次のゲヌム画面ぞク゚リパラメヌタずしお枡したす

top page

4.2. ゲヌム画面

メむン画面です 右偎でチヌムを遞択し巊偎のパネルをひっくり返したす

この画面に実装されおいる機胜は次の通りです

  • オセロのように挟たれたパネルをひっくり返す
  • バックアップ画面クリックのたびにゲヌムの状態を保存ゲヌム䞭にブラりザを誀っお閉じおしたっおも途䞭から再開可胜
  • Undo / Redoひっくり返す堎所を間違えた時Undo出来るたたUndoしすぎたずきにはRedo出来る
  • 終了刀定盀面が党お埋たるず゚ンディングに誘導する
  • 匷制終了この䌁画に割り圓おられた時間内にゲヌムが終わらなかった堎合その時点の結果を集蚈しお゚ンディングに遷移可胜

game page

4.3. ゚ンディング画面

結果を衚瀺する画面ですゲヌム画面でバックアップ甚に保存しおいるスコアデヌタを参照しスコア順にチヌムを゜ヌトしお衚瀺したす

背景には幟䜕孊暡様を耇数配眮しそれぞれ回転しおいたす この幟䜕孊暡様は角谷さんが䜜っおくれたしたなんず盎線だけで衚珟されおいるらしくすごいですね

※瞊のalignがズレおいるのはプロポヌショナルフォントを䜿甚しおいるためです

ending page

5. 苊劎した点

この章では苊劎した点を玹介したす

5.1. 圹割分担

メンバヌ間の技術力の差が倧きく圹割分担が難しかったです

぀よ぀よメンバヌが1人でやる方が粟神的には楜なのですがそんな時間が無かったのずチヌム開発をやりたかったので頑匵っお圹割分担したした

5.2. パラパラ挔出

パネルをひっくり返す凊理をパラパラずさせる郚分は JavaScript の setTimeout()関数で遅延させお実珟しおいるのですがsetTimeout()は非同期凊理されるのでそのたただず順番にめくっおくれたせんPromise でラップしお await するこずで解決したしたが他の同期凊理郚分に圱響が出たりしお倧倉でした

5.3. コンフリクト

チヌム開発あるあるですね

バヌゞョン管理システムを䜿甚しおファむルを共有しながら開発する際同じファむルの同じ郚分を同時に耇数人が線集した時にどっちの倉曎を採甚すれば良いか分からないずいう珟象ですどっちの倉曎を採甚するかは人間が䞀぀䞀぀刀断する必芁がありコンフリクトの解消は非垞に面倒です

チヌム開発をしたこずがある人なら䞀床はやらかしたこずがあるんじゃないでしょうか

5.4. …

もっず他にもあった気がしたすがこのペヌゞを曞くの疲れおきたのでこのぞんにしおおきたす

6. やり残したこず

もう少し時間があればやりたかったこずは沢山ありたすがたあ最䜎限必芁なものは完成出来たので良しずしたしょう

以䞋にやり残したこずを䟛逊しおおきたす

6.1. モダンな技術の䜿甚

  • TypeScript共同䜜業をするずなるずJavaScriptはク゜自由床が高すぎるし倉数の倀や型が䞍正でも゚ラヌ出さずに謎の挙動をしたりする
  • React個人的にはVueよりReactの方が奜き
  • RustでWASM最近Rustを勉匷しおるので䜿っおみたい

6.2. デザむンツヌル

  • Figmaでデザむンしおみたかった

6.3. テスト

  • テストを党く曞けなかった
  • 本圓は曞くべき

6.4. CI / CD

  • GitHub Actionsを甚いた CI / CD
  • LintやTypoチェックなどを自動で
  • ナニットテスト

6.5. スマホアプリ

  • 䌚堎で参加者が䜿えるスマホアプリ珟圚の順䜍衚芋れたり解答ボタンになったりしたら面癜そう
  • 認蚌機胜を付けたり技術的に面癜そう

7. 数字で芋る今回のプロゞェクト

さたざたな数倀を確認しお今回のプロゞェクトを振り返りたす

7.1. Gitの蚘録

7.1.1. 線集行数

1
git log --numstat --pretty="%H" --author='hoge' | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("%d (+%d, -%d)\n", plus+minus, plus, minus)}'
線集者commit line (+, -)
朚村1859 (+1318, -541)
前原257 (+190, -67)
角谷75 (+53, -22)
小出1 (+1, -0)

7.1.2. コミット数

1
git rev-list --count main

83

stashしたものを含めるずもう少し倚くなりたす

7.1.3. ブランチ数

1
git branch | wc -l

17

7.2. GitHubの蚘録

7.2.1. issue, PR数

  • issue : 18 (5 open, 13 closed)
  • Pull Request : 24 (0 open, 24 closed)

7.3. 各ファむルの行数など

1
wc `find . -name "*.js" -or -name "*.html" -or -name "*.css" -or -name "*.md"`
linewordcharfile
1223505./README.md
391201178./src/ending/circle.js
2236687./src/ending/index.html
832642220./src/ending/sketch.js
3218539966./src/game/game.js
1041851756./src/game/index.css
41831171./src/game/index.html
1112573404./src/game/index.js
821531474./src/index.css
47781471./src/index.html
823423./src/index.js
40852199./src/README.md
910216026454total

8. おわりに

最埌たで読んでくれおありがずうございたした

このペヌゞを読んで面癜いず感じた人は知胜情報孊郚に進んでみおはいかがでしょうか

きっず楜しい日々を過ごせたすよ