業務未経験のWeb開発初心者が、まず知っておくべき10箇条


概要

学校や趣味でプログラミングをやってきた方が、業務としてWeb開発をする際に必要最低限の知識をすべて持ち合わせているとは限らないです。
プロのスタート地点に立つ上で、以下10個ぐらいは全部知っておいてほしいなと思うものです。

コーディングスキル

1. ローマ字や無意味な変数名・関数名を付けない

意味のある変数名や関数名は適切な英語にしましょう。

NG例
const hensu = 0;
const a, b, c;

2. ネストを無意味に深くしない

NG例
if (x) {
  if (y) {
    if (z) {
      hoge();
    }
  }
}

可読性や保守性が低下するため、ネストはできるだけ深くならないようにしましょう。
深いネストはそもそも1つの関数でやるには重すぎることも多いので、別の関数に切り出す等の工夫を。

3. コメントは何をやっているかではなく、何故やっているかを書く

NG例
// 計算する
hoge();
// xがfugaの時に処理する
if (x == "fuga") {

プログラミングの授業では「コメントは適切に入れなさい」と教えられても、どんなコメントをすべきかをしっかり教えられていないケースもあります。
業務では大人数で保守運用していくはずなので、何をやっているかは見ればわかるので、なぜその処理をしているのか理由を記載した方が良いです。

名著である「リーダブルコード」の一読をオススメします。

コーディングでのマナー

4. 思考停止で『コメントアウトでとりあえず残す』ことはしない

NG例
/* いつか使うかもしれないのでコメントアウト
if (x) {
}
...
*/

今どきgitでバージョン管理していないなんてことはまず無いと思います。
その場合、「いつかまた使うかもしれないから」と、不要なコードをとりあえずコメントアウトで残しておくのは避けるべきです。

そういったソースコードはほぼ永久に残り続けて保守性を下げます。
コードを読み書きしている時にも邪魔ですし、使用箇所をgrepした時に引っかかったりすると迷惑でしかないです。

gitでは簡単に過去バージョンに戻せるので、近いうちに確実に復活するソースコードでない限りは消してしまいましょう。

コーディング以外の開発マナー

5. スクレイピングは1アクセス最低1秒は空ける

スクレイピングで情報を取得することもあるかと思いますが、一気に大量のアクセスをして取得すると相手サーバに負荷をかけることになります。
一般的には、最低でも1アクセス1秒を空けることがマナーとされています。

とはいえそれを守っていれば完全にOKというわけでもなく、過去には事件となっているものもあります。
スクレイピングにおいて非常に有名なこの事件は、Webエンジニアであれば知っておくべきものです。
岡崎市立中央図書館事件 - Wikipedia

6. テストメール

開発中に登録するダミーのメールアドレスは、example.comやexample.org等を使いましょう。
適当な文字列@gmail.comや@test.com等をついつい使いがちですが、そのメールアドレスが実在した場合、誤ってメールが送られて迷惑を掛けることがあります。
また、送られる内容によっては機密情報の漏洩にもなりかねないので要注意です。

example.com等は開発用に確保されているドメインです。
example.com - Wikipedia

パフォーマンス、セキュリティ的なもの

7. N+1問題に注意する

ORMを通じてデータを一覧取得し、ループ処理をした際に関連モデルを事前に読み込んでいない場合等に発生します。
本来SQL1本で済むはずが、1行データ表示ごとに1本流れて、結果として不要な大量のSQLが流れることになります。

発生しても(よっぽど件数が多くない限りは)ページが重くなるだけでエラーが発生しないので気付きづらいです。
Ruby on Railsの開発ならbulletというGemで検知できるので、利用してみると良いかもしれません。
https://github.com/flyerhzm/bullet

8. CSRF対策を理解する

詳細は割愛しますが、CSRF対策が十分でない場合、意図しないフォーム送信等のトラブルを引き起こすアタックを受ける可能性があります。
基本的にWebフレームワークであればフォーム送信時にCSRF対策用のトークンが自動的に埋め込まれてCSRF攻撃を防ぐ仕組みになっていますが、しっかり理解せず「フォームがうまく動かないから」とCSRFプロテクションを外したりしないようにしましょう。

9. XSS対策を理解する

こちらも詳細は割愛しますが、エスケープ処理が不十分といった理由で不正なスクリプトを実行される攻撃です。
Cookieが盗まれる等の影響が出る可能性があります。

XSSとCSRFはこちらの記事が分かりやすいです。
3分でわかるXSSとCSRFの違い

よくある手法としては、クエリ文字によって検索するページにおいてcookieを別サイトへ送信するアタックです。
エスケープ処理が不十分(<や&)なことで起きるため、エスケープ処理は怠らないようにしましょう。

10. SQLインジェクション対策を理解する

Ruby on RailsのActive Recordの例

NG例
.where("title = #{title}") # ダメ
.where("title = " + title) # こっちもダメ
OK
.where("title = ?", title) # OK
.where(title: title) # こっちでも

これも知らないと結構やってしまいがち。
Railsに限らず、他の言語やFWでも同様のことをやってはいけません。
任意のSQLを実行できる脆弱性を付かれて、DBを消されたり個人情報を盗まれる等のリスクがあります。

とりあえず覚えておくべきなのは、SQLの中に式展開や文字列結合をしないこと。
パラメータに;を入れられて任意のSQLを実行させることが可能な場合があるためです。