今回は、業務でプログロムを書く機会が増える前に知っておきたいことです。
システムは、プログラム内で扱う変数や関数のみで成り立っているわけではありません。
データが必要になったらデータベースのデータを取得したり更新したりします。画像や動画などのファイルにアクセスすることもあります。
Webの画面であれば、リクエストのURLやヘッダー・ボディに格納されている値にアクセスする必要もあります。
データやファイルにアクセスするということは知っていても、そのコードをどのように書くのかを知らなければ使えません。データベースのデータを更新する際には、一貫性を担保するためにCommitやRollbackをすると知っていても、そのコードをどのように書くのかを知らなければ使えません。
プログラミング言語によっても書き方が異なりますし、データベースによっても書き方が異なります。ファイルアクセスも同様です。
そのうえ、細かい注意点やお作法もあります。
これらのお作法を守れなければ、レビュー時にかなり強めに指摘されてしまいます。
自分がやりたいことを事前に整理しておき、必要なときにすぐに書ける準備をしておきましょう。
データベースにアクセスするコードの書き方
データベースへのアクセスで必要になるのは、主にSQLです。
データベースと接続し、書いたSQLに従ってデータをCRUDします。(CRUDが何か分からない方は、コチラを参照してください。)
ここで必要になるコードや注意点は、以下です。
- データベースと接続する方法
データベースと接続には、接続文字列が必要にもなります。その書き方や接続文字列には何が必要なのかも含めて理解しておきましょう。
また、接続の管理を徹底する方法も理解しておく必要があります。一度接続してからエラーが発生した際に、必ず接続を切るようにコードを書くことです。 - トランザクションを管理する方法
CommitやRollbackを実行してデータの一貫性を保つ方法です。
コードの書き方を誤ると、RollbackをしてもデータがすでにCommitされていて元に戻せなくなる場合もあるため、データが戻っていることも確認しながら作業を進めてください。
また、データベースと接続する際にはダーティリードを許容するかどうかの選択も必要です。よく分からないからと適当に選んではあとでお叱りを受けるので、意図をもって選びましょう。 - SQLに引数を渡す方法
ただ引数を渡すだけではなく、パラメータとして渡してSQLインジェクションを防止する方法を知っておく必要があります。
また、各上限値にも注意が必要です。パラメータ数やIN句のカッコ内に書ける数には上限数があります。多くの条件を記述する際には注意が必要です。
データベースごとの違いも現れます。SqlServerの場合は、DBの設定によってSELECTのWHERE句で文末に半角スペースがあってもないものとして検索がなされます(”WHERE COL = ‘test value'”と、”WHERE COL = ‘test value ‘”は、同じ結果を返します)。 - 排他制御をかける方法
データベースの排他制御には、楽観的排他制御と悲観的排他制御があります。
特にデータの更新や削除をする際に必要となりますが、排他制御のかけ方はプロジェクトによって異なる場合があります。上司にしっかりと確認しましょう。
フォルダやファイルにアクセスするコードの書き方
フォルダやファイルを扱う際に必要となるコードや注意点は、以下です。
- フォルダやファイルにアクセスする方法
ローカルにある場合はパス指定ですが、別のサーバーにファイルを置いている場合やクラウドのストレージに置いている場合もあります。
置き場所ごとにアクセス方法も異なるため、以前と同じ方法で出来ると思い込まずに丁寧に調べましょう。
また、目的のフォルダやファイルが深い階層にある場合、その上位のフォルダが存在しているかどうかを確認しないとExceptionとなる場合もあるため、不要なエラーを起こさないよう注意してコーディングしましょう。 - ファイルを開く方法
ファイルを開くことは簡単ですが、データベースのときと同じく開いたら必ず閉じる必要があります。エラーが起きてもファイルを閉じるように管理しましょう。
また、ファイルの開き方にも読み取り専用か書き込みもするのかで、他の人が開けるかどうかが変わります。むやみに占有ロックを取らないようにしましょう。 - ファイル形式による違い
csv,tsv,json,xml・・・。テキストファイルだけでも様々な形式があります。Excelや画像ファイルなどを扱う場合もありますし、それぞれファイルの開き方もデータの読み方も違います。
すべてテキストファイルの扱い方と同じだと思い込まないようにしましょう。 - 排他制御をかける方法
データベースと同じく、ファイルにも排他制御が必要となるシーンがあります。
プロジェクトとしてどのように排他制御をかけるのかを上司に確認しておきましょう。
Webのリクエスト/レスポンスを扱うコードの書き方
Webのリクエスト/レスポンスで大切なことは、リクエストとレスポンスの2つがあるということです。
今自分が扱おうとしているのはリクエストの中身なのか、レスポンスへの値の入れ方なのかを常に区別しながらコーディングしましょう。
Webリクエストで必要となるコードや注意点は、以下です。
- リクエストから値を取得する方法
ヘッダー、ボディ、URLから欲しい値を読み取る方法は必須です。それだけでなく、値がなかった場合の制御や不正な値が入力された際のハンドリングも必要になります。
WEBの場合は何が渡ってくるかは分からないと言っても過言ではありません。1つずつ丁寧に値を確認しましょう。 - レスポンスに値を入れる方法
レスポンスもリクエストの場合と同様、ヘッダー、ボディ、URLに正しく値をセットする方法は必須です。また、正常時のレスポンスだけでなく、エラー時や異常なリクエストへの対処も必要です。 - 認証情報を扱う方法
アプリによって認証情報の持ち方は異なります。認証だけでなく認可の方法も合わせてチームに確認しておきましょう。
まとめ
ここに書いてあることは、どれも業務では知っている前提で作業を依頼されます。少なくとも、一度経験したら知っているはずと思われます。
何度も同じことを確認しないで済むように、深く正確に理解して使えるようになっておきましょう。
そして、違うデータベースやファイルの種類になったとしても、「同じ考え方」を適用して適切にコードを書けるようにしておくことが重要なポイントです。
焦らず丁寧に、1つずつできることを増やしていきましょう!