はじめに
表題の件ですが、つまり、未経験者が転職用のポートフォリオとして、JSP・サーブレットを使用し、土木向けSNSWebアプリ(オンライン公開予定)を作っている連載です。
第1回はこちら
https://qiita.com/necofuwafuwa/items/fc014d1e99e52de617f4
今回やったこと
・人のプログラムを読もう
・技術と時間を踏まえて自分の作りたいものを見直そう
・実際にプログラムを書こう
今回はプログラムを読み、書いていく話1号です。
同時進行でお借りしているVPSにApacheやTomcatを入れ、セキュリティを見直し、オンライン公開のためのWebサーバー、アプリケーションサーバーの用意をしています。
ちょっと記事に出力するところで時間がかかっている模様…。考えをまとめ、日本語に出力することが難しすぎる。
環境
フロントエンド:JSP、CSS等
バックエンド:サーブレット、Java
データベース:PostgreSQL
開発環境:Eclipse
人のプログラムを読む
読むプログラムの選定
素人なので、どのような分岐が存在して対応を考えなければならないか、具体的な見通しが不明です。適切な挙動も、望ましくない動きになってしまった場合も、セキュリティの面や保守しやすさの面でも、見通しがとても甘いのです。
というわけで、いくつか検索して読んでみます。
しかし、素人なのでプログラム量に対して読む時間がかかりすぎる。
いくつかをブックマークやダウンロードして直ぐに参照できるようしておき、そのうちの1つを主軸に読み、他のプログラムのそれっぽい場所をチラ見して補足的に「こんなやり方もある」と参考にする形をとることにしました。
読み方
主軸のプログラム、普通に読むと「Aインスタンスの中、Bインスタンスあるな。C引数だ。メソッドオーバーロードしてるけどどれ!そして戻ってきたDを変数に入れて…?リクエストスコープを使っているがこれには何が入って…?」と迷子になりました。
シーケンス図もどきを使用して整理します。
※作成当初シーケンス図という発想がなく、「スプレッドシートに整理しよう!」と動いていた結果、最終的に「これはシーケンス図では」というところに落ち着きました。そのためもどき。
シーケンス図もどき
最近サーティファイ2級を受験したので(合格いただきました、やったね!)、各クラスや変数、挙動の記載があるとわかりやすいな…という発想のもと作りました。(その時点シーケンス図というものをうっかり頭から逃し)
- 各「クラス」、各「メソッド」、「引数」、「戻り値」を一覧(①)にする
- JSPを1つ選び、上から読む
- JSP途中サーブレットがいるのでサーブレットのメソッドを読む
- サーブレット途中JavaBeansがいるのでインスタンス化されたクラス・メソッドをひもとき、「このJavaBeansは何のためにいるんじゃ?」というのを「挙動」という項目で①に追加する
- JSPを最後まで読んだとき、使用した「クラス」「メソッド」を同じ色で塗る
- 各項目を全てコピーして別途矢印でどの順番に使用されたか遷移図(②)を作成する
- アプリケーションスコープやセッションスコープ等が出現したときは別途メモ(③)
図を3つ作ったのは、
①…使用されなかったものがないかの確認や、索引的な使い方をするために、フォルダ・メソッド並び順で一覧としてほしかった
②…どのような手順で処理が行われているか知りたかった
③…今回引数・戻り値以外の細かな変数のメモはしていなかったため、①②では表しづらかった
といった理由です。
少々手間はありますが理解するスピードは格段に上がりました。補足的に見るプログラムもどこを見ればよいか推測が早くなります。
自分の作りたいものを再度見直す
転職目標まで時間がないということで、人様のプログラムを理解したところで機能の見直しを行います。
〇最低限設置したい
・アカウント作成(ユーザーID、アカウント名、パスワード)
・ログイン、ログアウト
・投稿(投稿内容、ユーザーとの紐づけ、投稿日時)
・投稿をタイムライン状に並べる
・タイムラインを一定時間ごとに再読み込みする
・可読性や保守性、セキュリティに配慮した設計となっているか確認
〇できれば設置したい
・アカウントがなくてもタイムラインが閲覧できるようにする
・SNSが指定したいくつかのタグのうち1つをつけられるようにし、タグごとに投稿を集計する(数が把握できればよい)
※学習報告アプリのため、頑張った記録が残せればよい
・投稿やアカウントの削除
・CSSでの可読性・操作性のみに配慮した装飾
〇時間が許せば設置したい
・アイコンの設定
・CSSでのおしゃれな装飾
・投稿の検索
・リプライ機能
・絵文字で投稿にリアクションする
現在アカウント作成、ログイン、ログアウト、投稿、タイムライン状に並べる、タイムラインを一定時間ごとに読み込むといった内容ができるプログラムが完成しています。
ここからいったんプログラムの可読性・保守性・セキュリティなどを見直したいと思います。プログラムをきれいにしたら、シーケンス図も作成したいですね。未来の私のために(忘れるため)。
次回はTomcatたちについての記事が先か、プログラムが進むのが先か。ごうご期待!