10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【レビューで指摘されがちシリーズ】ありがちな処理は既存のメソッドがないか調べましょう

Posted at

レビューで指摘された内容をそのまま放流するシリーズ。まとめページ もあります。

私が現在行っているプロジェクトでは一部 PHP を扱います。私は PHP を触る機会はほとんどありません。大体 C# 部分のコードを触っています。そんな私が Laravel で artisan コマンドを作っていたときの話です。

astisan コマンドで JSON ファイルの内容を一部ゴニョゴニョっと処理をして、 CSV フォーマットにしたものを標準出力に吐き出そうとしていました。標準出力で吐き出したものはユーザーが CSV ファイルにリダイレクトして、それをエクセルや Google スプレッドシートなどに読み込みさせることを想定しています。

ここでエクセルなどに読み込ませたときに、1つのセル内で改行して複数表示したい項目がありました。エクセルのイメージはこんな感じです。

無題のスプレッドシート - Google スプレッドシート - Google Chrome 2023.png

これを実現するためには、出力結果を "" でエスケープする必要があります。(参考:【JavaScript】CSV 書き出しの際に必要なエスケープ処理と二次元配列→文字列変換の方法)

そこで私は "" で囲めばええんやな。OK!ってことでこんな感じのコードを書きました。
csv の要素が格納されている配列の全ての要素を "" で囲んでいます。

$csv_data[] = array_map(fn ($value) => '"'.$value.'"', $target);

それに対して次のようなコメントをもらいました。

fputcsv と言う関数を使うとCSVのエスケープをしてくれるようです。

いわゆる、「車輪の再発明」状態になっていました。今思えば何が「 "" で囲めばええんやな。OK!」なんだよ…昔の俺…という気分になります。

よくありそうな処理は一度自分で使えるメソッドがないか調べないといけないなと思いました。(普段から思っているつもりだったんですが、いざというとき出来ていませんでした。)得に経験が少ない言語は調べる必要がありそうです。

最近だと ChatGPT に聞くという手段がとれるので、経験が少ない言語でも調べるしきいが下がっています。

こういった指摘をもらわないように、自分で調べるというのを癖付けたいです。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?