【新歓ブログリレー】効率よくWebアプリを設計する方法
新入生のみなさん、ご入学おめでとうございます!!!
私は電子情報システム学科に去年入学したのですが, 残念ながらこういう状況なので, 入学式もなければ大学生としての自覚もないです。
最後のほうで私の使ってるPCの性能をペタペタしておくのでよかったら参考にしてください.
タイトルについて
そのままです。ちなみに私はチーム開発の経験はほぼないですし, ほぼ独学で身についた悪癖について, 何かの参考になればと思いました.
使い慣れた言語/ライブラリを持っておく
いきなりWebアプリを作ろうとするの, それは無理です.
最低限プログラミング言語のひとつは自由に操れる状態であることが必要だと思います.
さらに, Webアプリを作るためのライブラリのうち,おおよその機能の把握ができているものを1つ以上持っておくことをお勧めします.
基本的にWebアプリに求められる機能はたいていのライブラリに備わっていますが, いちいちメソッド/関数の名前をググるのはだるいので覚えておくといいです.
ちなみに私はJavaという言語とJavalinもしくはSparkJava(Apacheじゃないほう)はある程度ググらなくてもWebアプリを作るための機能は覚えています.
アカウントを管理するクラスを先に設計しておく
大体アカウントはメールアドレス/パスワード/アカウント固有のIDを持つことがほとんどですので, それらの変数をフィールドにもつクラスをさくっと実装しておきます.
メールアドレスを直接文字列で持っておくのではなく, 専用のクラスを作って, バリデーションをかけられるようにしておくのはいいかもしれない(いま思いついた)
ちなみにWebサービス上でパスワードを管理する際, 生のパスワードを保存しておくのは何か(ハッキングとか)に備えてやめましょう.
基本的にはパスワードとソルトと呼ばれるある程度長い, ユーザーごとに異なる文字列をセットでハッシュしておくといいと思います.
また何回もハッシュにかけるストレッチも実施したほうが良いです.
扱うデータの適切な最小単位を考える
ツイッターを例に出すと, 次の情報が適切な最小単位かもしれません
– ツイート固有のID
– ツイート本文
– 発信者 (ここはアカウント固有のID)
– リプライ先
– 日時
– 本文
– いいねの数
それ単体だと情報がゼロになってしまうが, 逆に多すぎると扱うのが難しくなってしまうので, ここはちょっとセンスがいるかもしれません.
もちろんよくよく考えればセンスはいらないのですが, 考えすぎて開発が進まず, 考えに考え抜いた設計が機能の追加の発生とかで設計しなおしということもあるので, さらっとこなしたいことだと思います.
切り出した最小単位の情報を管理するクラスを設計する
いわゆるストアとか呼ばれるやつを作ります
基本的にはCURD(Create 作成 Update 更新 Read 取得 Delete 削除)の機能を実装したクラスを作ります
ここのクラスはJavaであれば, インターフェースにCURDを定義してクラスに実装させておくことで, モックが作りやすくなるかもしれません.
私はここのクラスにデータベースに発行するSQL文をべた書きすることが多いのですが, これはあまりよくない実装なのかもしれませんが, 正解もみたことないので今のところはこのようにしています.
また, サーバー起動時に一度データベースから全データを取得してストアクラスにHashMapとして持っておき, そこからデータを読む設計のほうがいいと思いました. 距離が遠い場合, ここに工夫がないと読み出し速度を下げる原因になると思います.
またデータの書き込みはSQL文を1行でできるような実装(バルクインサート)をしておくといいと思います.
私はストアクラスのnew時にThreadを立ち上げてその中にTimerを生成し, その中でキューにたまったSQLの更新作業を定期的にするようにしました.
DB周りの自分の想像
行が多い場合は最新の500行ぐらいは読んでおいて, あとはSQL文を発行する形になると思いますが, 頻繁にデータを読み出す機会が多くなるサービスであることが分かっている場合, インデックスというものを貼ったほうがいいらしいです.
書き込みが頻繁にある場合は逆にインデックスのせいでボトルネックになる場合があるようですが, その場合は書き込む専用のデータベースと読み込み専用のデータベースをもつなどの工夫が必要だと思われます.(全部想像)
Redisなどのインメモリデータベースの活用
頻繁に書き換えが存在し, かつそこまで長期間保存しておく必要がないもの(例えばセッションとか)はデータベースに持っておかずに, プログラムのメモリに直でデータを置くか, Redisというインメモリデータベースを使ってそこにデータを置くほうがいいと思います.
おしまい
ざっと思いつくだけ書いてみたのですが, まだまだありそうなのと, もし本職とかそういう人がみて「これ違う」とかあると思うのでぜひ教えてください.
新入生にむけてPC紹介
お待たせいたしました.
電情現1年の私が使っているPCはこいつです.
これはIntelCPU搭載のMacです.
一応賛否両論のあるMac(いま見てる限り否しかないのですが…)ですが使ってます.
選んだ理由として, USキーボードが選べること,本体とOSがお洒落なこと, WindowsよりMacのほうが文字がキレイなこと, (個人的には)開発環境として安定していることです.
正直こいつで自分が困ったことはないし気に入っているのですが, そもそも前提として授業で使うプログラミングの環境構築は自己流でなんとかできる技量はもっていたので, そういうのに技術もないし自信もないし時間もかけて向き合いたいとかいうのがなければおすすめしません.
また, Scombという学内システムで, テストをMacデフォルトのブラウザで受験すると制限時間のカウントがおかしくなり, 制限時間を突破しても締め切りにならないという謎エラーが一部で報告されています.
私はこういう事態に遭遇したことはありませんが, こういう事態に教授とコンタクトを取って~~とやりたくないのであればWindowsを買っておきましょう.
おそらくお友達でMacを大学に持ってくる子もそれほどいないのでトラブルシューティングにも困ることになると思います.
困ったら自分に聞いてくれてもいいんだけど(えっ?)
Mac買おうとしているそこの君, 赤線の↓を絶対に買うなよ!
赤線引っ張ったけど,このM1ってついてるやつは絶対買うな!!!!
M1プロセッサーは出たばかりでアプリを作るためのソフトが現在進行形で対応中です.
メジャーなソフトは動作が不安定です.
アップル製品で新しいタイプの製品買うときは2~3世代待ったほうがいいって言われています.
コメント入力