CSVでヘッダとボディを同時に定義するやり方|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。長い梅雨が終わって暑い夏がやってきました。夏のTechRachoフェアということで、今日はみなさん1度は実装したことのあるCSV出力に関して語って見たいと思います。今回は以下のテーブルをCSVに出力したいとおもいます。NULLとかINDEXとかはご容赦ください適当にデータを突っ込んだ画面です。全レコードの「タイトル」と「内容」「価格」だけをCSVに出力したいヘッダは日本語でつけてねArticleのクラスメソッドで実装するならこんな実装になるかと思います。ないか!いらない発行年度と号数を出したいこんな感じで改修すると思います。endendもちろん仕様変更します!!じつは価格として税込価格(8%でいいよ)も追加してあぁ販売テーブルとJOINして販売数とかも追加して.......?要求変更に関わる実装上の課題このように仕様の変更が起こる度に、CSVの列に変更が入ります。両方を変更する必要があります。列数が少なければ目視で確認できますが、列数が増えてくると取り違えする可能性が高くなります。38...※「販売数」と「価格」を取り違えた例。データ次第では気が付かないコードを改善しようヘッダと、ヘッダに対応する各値の実装が分離しているから取り違えてしまいます。同時に書ければ取り違えは起こりません。こんなコードにしてみました。endなにしてるんだろう?まずはヘッダの出力です。rule.keysでヘッダ部の出力になります。書き下すと以下のようになります。書き下してみましょう。実行されるとarticle.yearとなります。全体では、結局以下のようになります。article.price]まとめヘッダ名とヘッダに対応する値の取得方法(述語)とを、予め対応づけしておくことで、列の変更に強い実装にすることができました。ヘッダ名が重複するので、hashで定義出来ません。けんちゃんラーメンって世代によっては分からないかも。2.6のCSVライブラリはいいほかExcelでCSV保存したときに半角スペースがはてな(?)に文字化けするシェアツイートブックマークLINEこの記事を書いた人kazzJavaエンジニアで生きてきましたがこのたびRailsエンジニアになれました。オブジェクト指向中毒者のおっさんです。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。