2014年8月4日月曜日

IT勉強会について本気出して考えてみた

なんか広島が誇るスーパーハッカーひむらさん(以下:ひむひむ)が広島の未来に憂いてるみたい。

地方のIT勉強会ってこのままで大丈夫なのかな


僕から見たひむひむはこの一年で中国地方を代表するエンジニアのポジションを築き上げたのは間違いない。
元々彼自身に色んな魅力があった上に彼の行動力で為した結果だと思う。
そこに大きな影響を与えたのはオープンセミナー広島やすごい広島を始めとする勉強会の存在。
そんな彼だからこそ勉強会の良さとか大切さとか、そしてこのままでは無くなっていく危機感みたいなモノを感じてるのかなと思う。
実際にそれは勉強会ブームの終息と共に僕も強く感じてる。
例えば去年、こんな話題でJJUG CCCに登壇させていただいた。


■当日のTwitterまとめ
JJUG CCC 2013 Spring R2-6 [BOF] 地方における勉強会事情

■当日のふりかえりブログ
JJUG CCCに参加&セッションしてきた

■当日の資料



僕はこの資料のとおり、勉強会はコミュニティに育ててもらってるしすごく楽しいものだと思ってる。
だけどこの前後くらいからゲーセンの格ゲーと同じ「緩やかな死の足音」みたいなモノを感じてた。
実際に今まで主力で勉強会に来てた人が少しづつ勉強会から離れてる。
例えば


  • 結婚したり子供が出来た
  • 転職等で遠方に転居した
  • コミュニティの取捨選択の判断が厳しくなった
  • 交友関係が成熟していて発展がなく、勉強会として集まる必要があまりない
  • そもそも勉強会に対するリソースやコストが割に合わない


などなど。
他にもいっぱい理由があると思うけど何らかの理由で人は減ってる。
で更にこの後、Twitterでこんなことがあった。

Twitterまとめ - 勉強会について本気出して考えてみた

この時、第二回 中国地方DB勉強会は正直コンテンツとかタイミングとしては自信があった。
(どれくらい自信があったかと言うと100人入る部屋借りたくらい)
だけど結果としては思ったよりも集客は少なかった。
これは

・ターゲットに対するアプローチが下手だった
・コンテンツの魅力を自分が伝えきれなかった
・そもそもDBというコンテンツ自体がみんなの興味を獲得できてないのかもしれない

などなど他にも沢山色んな理由があるんだろうけど僕は

とりあえずで勉強会に参加してくれる時代は終わった


つまり勉強会ブームは完全に終わったって思った。
これは格ゲー時に既に通った道だったのですごくハッキリと感じた。
なのでこのまま放っておくと参加者の新陳代謝は無くなってどんどん人が減っていくと思う。
そこでこの時も言ったけど


と思ってる。
実際にゆるふわ系というか身内にまったりやる集まりはそれなり見かける。
だけどそれだけじゃあ勿体無いと言うか緩やかな死は止めれないと思ってる。
そこで自分が考えた一つが次のとおり。

1. 参加者の新陳代謝を上げる

そもそもなぜ僕がお金が使える勉強会も必要だと思ってるか。
まず色んなスタイルで色んな人が楽しめれば良いんだけど本当に聞きたいこと(日頃経験してない知識)って一日じゃあなかなか手に入らない。
だからやっぱすごい人に教えてもらうのが手っ取り早いしそういう情報を仕入れるアンテナを作る必要がある。
それに一番効果的なのは勉強会にその手の達人を呼んでコネクションを作ること。
(インプットを育てる)
その次に大切なのが自分のアウトプットを増やして知識の定着をすること。
だからまずビックスピーカを呼ぼう!!
ってのが建前。
実際のところ、兎にも角にも参加者の新陳代謝の活性化には新しい参加者が必要。
そこで勉強会に来たことが無いような人が来るきっかけになるような強い動機にはやっぱ

  • 即実践投入できる知識や経験の取得(ハンズオンとか)
  • 名前や概要を見ただけで聞きたくなるようなスピーカー

みたいなわかりやすい魅力だと思ってる。
(当然他にも 勉強会の色気 を出すような工夫も日々必要だけど)
そこで遠方の講師を呼ぶってなると最低限、交通費と宿泊費はかかる。

# いつもノーギャラで来て頂いてる皆様。
# そしてボランティアでやってくれてるスタッフの皆様
# 本当にありがとうございます。

で実際にそういう人たちに来てもらうセミナーとかは3000円~5000円とかする。
例えば第1回 中国地方DB勉強会の例を取ってみるけど

■第1回 中国地方DB勉強会
※当日の内容は動画も資料もあります

■関東の講師(この時は奥野さん)を呼ぶ
・交通費 約4万円
この時、奥野さんは宿泊費しなかったけど宿泊費する場合はいつも上限1万円で宿泊費も出す

■設備費
・会場費 4,280円+ 通信費 600円
大学の施設や県の施設を借りると安く済むので助かる
(この時は県の図書館を借りた)
広島市内で100人近く入る会場(例えばRCC文化センター)を一日借りると5万とか超えちゃう。

これは大垣さんには大変申し訳無かったけど交通費自費で来てもらった上でこの状態。
スタッフのみんなも交通費とかボランティア。
で参加者はスタッフ抜くと13人くらい。
単純に人数で割ったらこれでも参加費3000円超えちゃう。
こうやって考えると有料セミナーの参加費が3000円~5000円かかるのは適正価格だ。
しかも実際に地方から東京に行ってセミナーを聞く交通費を考えると格安だ。
と考えてくれるのは訓練された勉強会参加者だけ。
ちょっと興味があるくらいの人に3000円なんてハードル高い。
中国地方DB勉強会だって地元の人が参加費3000円だと参加しただろうか?
だから参加費はできるだけ低価格に抑えたいのが運営側の本音。
そうなると自腹を切るリスクとか大量の人数動員が必要になったりとかで本当にハードル上がる。
そこでお金を使える勉強会の存在が大事になってくる。
例えば中国地方DB勉強会はJPUGが予算出してくれるからコミュニティの援助のお陰で参加費を0円に抑えれてる。
オープンセミナー広島オープンセミナー岡山は地元企業の協賛のお陰で参加費を0円。
こういう勉強会の実績をどんどん積み上げて勉強会を支援する動きがもっと活発になってくれば色んな取り組みが出来るようになるはず。
例えばTDDBCなんて超素晴らしいイベント。
だけど今年は開催されない…
(スタッフではないので詳しい理由は知らないので下記はあくまで推測)
例えばハンズオンは講師(TA)の数が必要になるし準備も大変だ。
さらに参加費で予算を賄うのであれば運営のリスクも大きい。
だから毎年大体的にやるのは大変だと思うので仕方ないと思う。
(TDDBCなんかは何回も参加するイベントでも無いので母数が少ないと需要がなくなるの早いし)
でもこれを支援する仕組みがあったら来年は開催されるかもしれない。
そしてそういう仕組を作るための基盤作りを今自分は頑張ってるつもり。
そしての基盤作りの中で新規の人が来るきっかけ作りをしてる。

2. 勉強会に来てもらった人を育てる

お金のかかった勉強会に来てもらった。
そしたら次はもっと勉強会を好きになってもらう必要がある。
そういう時にゆるふわ系の勉強会はすごく重要なポジションになってくる。
あの身内で同じ趣味の話をしてる時間は至高の時間と言っても過言じゃない。
だからそういう勉強会もすごく大切だと思うしそんなイベントの方が楽しいとさえ思う時がある。
そしてそういうのはひむひむがすごい頑張ってる。
だから僕は人を集めたら今度はひむひむのようなコミュニティに上手く誘導する必要がある。
なので僕は中国地方DB勉強会はPostgreSQLに限らないしエンタープライズもWeb系も題材に取り上げて色んな人に来てもらうし色んなコミュニティへの橋渡しをしてる。
中国地方DB勉強会やオープンセミナー以外の他にもWeb Touch Meetingとかオープンソースカンファレンス@広島とかそういう集客の要素と橋渡しの要素がすごくあると思う。
そういう橋渡しを行いながらもっと勉強会を楽しむ人を増やして参加者の滞在率を伸ばしたりする必要がある。
そういう場所に来るのは100人集めて1人かもしれない。
だけどその1人が居なくなったらそれこそ緩やかな死から末期の状態になっちゃう。
だから懇親会だったり、日頃のコミュニケーションだったり、色んなところで何らかの楽しさが芽生えてほしいしそういうきっかけ作りは大事だと思う。
そういうところは岡山のコミュニティは上手だなって思う。

3. コミュニティ(勉強会)の一部になってもらう

一番わかりやすいのはスタッフ。
でもスタッフだけがコミュニティの一部じゃない。
ブログを書くまでが勉強会とか言ったりするけど「○○勉強会に参加しました!めっちゃ面白かった!!」ってブログ書くだけでもコミュニティの一部。
それを見た他の人は興味を持つし、それを見つけたスタッフは嬉しくてその日のビールは旨さ10倍。
そしてそんなコミュニティへの関わり方で一番簡単なのはひむひむ言う通り、イベント情報の拡散だと思う。
ひむひむも言ってるけどSNSでは今は色んなシェアの仕方もある。
僕はもっとレイヤー低くていいと思ってて職場の昼休憩の話題にしてくれるだけでもいい。
他のイベントとか飲み会でちょっと話のネタとして話題に出してもいいかもしれない。
他にもTwitterで話題が出た時にちょっとリプを飛ばし合うのも良いと思う。
そういう積み重ねが1をやってる自分や2をやってる人達の助けにすっごいなる。
だからひむひむはもっとみんなにコミュニティの一部になって貰いたいんだって伝えたかったんだと思う。




ということで感情に任せて一気に書いたからまとまってないけど無理矢理まとめる。
僕にはひむひむのような求心力はないけどコレを見てた人が少しでも自分たちの楽しい居場所とか好きな事について考えてくれたらなって思う。
今回はIT勉強会が軸だったけど実はこれは結構色々当てはまる。
例えば僕の所属する日本PostgreSQLユーザ会だってそう。
先輩方のすごい努力で日本のコミュニティとしてすごく大きいコミュニティになってる。
でもデータベースエンジニアって若い人が全然足りないからコミュニティの平均年齢がどんどん上がってる。
10年後、コミュニティが今と同じ状態になってるか正直わかんない。
だから僕は育ててもらってるコミュニティの恩返しの一つとして勉強会を通してJPUGの新陳代謝の活性化を目指してる。
他にも冒頭で触れた昔ながらのゲーセンとかもうほんとヤバイ。
どんどん潰れて無くなっていて地方だと絶滅危機種。
雀荘とかも今は随分見なくなったよね。
こういった事に流行り廃りは絶対あるんだけどその中で自分が好きな場所とかこれは大切だって思う事に対してはみんなもっと積極的になったほうがいいと思う。

と全然まとまって無いけどまとめとしてはこんな感じ。

2014年7月24日木曜日

第四回 中国地方DB勉強会を開いてきた

第四回やって来ました。
そして中国地方DB勉強会は皆様のおかげで1年が経ちました。
今回もJPUG主催で行いましたが今回はクレオフーガハーレムさんの希望でチューニングをテーマに行いました。
またクレオフーガはMySQLをメインに使っているので今回はMySQLとPostgreSQLにフォーカスしました。
それと前回好評だったハンズオンも行いました。
個人的には非常に充実した一日で大満足です。
ただハンズオンの準備や細かいコンテンツの調整は大変でした。
無事成功したのは講師の喜田さんと山﨑さんのおかけです。
本当に色々とご協力してくださりありがとうございました。

そしてそんな第四回の詳細は次のとおりです。

■登壇資料など

中国地方DB勉強会のポータルサイトにまとめました。
http://dbstudychugoku.github.io/events/event-004.html

また当日のハンズオンの資料の中に
  • MySQLパフォーマンスチューニング概要.txt
  • サブクエリ最適化の検証.txt
という資料で講師の山崎さんが纏めてくださっています。
MySQLのチューニングに関するTIPSが載っています。
また喜田さんのPostgreSQLの資料は非常に良くまとまってます。
PDFなのでダウンロード必須です!!


■メーリングリスト

次回の告知についてはMLやDoorKeeperを使います。
興味がある方はチェックしてみてください。

中国地方DB勉強会ML Google Group
dbstudychugoku@googlegroups.com

DoorKeeper


■動画とtwitterのまとめ

今回はUstream配信はありませんでした。
Twitterについては@razonさんがまとめてくれています。

第4回 中国地方DB勉強会 in 岡山 まとめ #ChugokuDB



■第四回のアンケート募集中

当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


■MySQL Workbench 6.1.7(最新版)のバグについて

勉強会でご紹介したビジュアルEXPLAINに関してバグが見つかりました。
MySQL Workbench 6.1.7(最新版)で、

・ビジュアルEXPLAINが取得できない

というバグが存在しました。
現時点で、ビジュアルEXPLAINを使用するためには、古いバージョンの(MySQL Workbench 6.1.6以前)を使用頂ければと思います。
また、本バグは既にバグ登録されており、開発者が対応中です。
以下のバグ報告サイトにアクセスして右側にある「Affects me」をクリックして頂ければ、開発者にバグで困っている人が多くいることを伝えることができますので、よろしければ
クリックして頂ければ幸いです。

http://bugs.mysql.com/bug.php?id=73256


■第5回 中国地方DB勉強会

日時:2014年9月21日(日曜日)
会場:広島県広島市中区大手町1-5-3 サテライトキャンパスひろしま 501号室
内容:各データベースのトラブルシューティングについて

  • ※セッション対象予定
  • PostgreSQL(確定)
  • MySQL(講師交渉中)
  • OracleDB(確定)
  • SQLServer(確定)
  • MongoDB(オライリージャパンのMongoDBインアクションの翻訳者の玉川竜司さん!)

以上のように考えています。
既に各DBの講師に依頼をかけており、豪華講師陣になりました。
今回はハンズオンはありませんが実際のDBAや開発者にとってかなり充実した内容になると思います。
また始めて有償DBのエンジニアやNoSQLのエンジニアの講師をお呼びしております。
交流含めて是非参加をご検討していただけたらと思います。

申し込みサイトが出来ましたらMLやDoorKeeperで告知します。
ご興味がある方は上記のMLとDoorKeeperにご登録してみてください!!


■オープンソースカンファレンス2014@広島

第5回 中国地方DB勉強会の前日に同会場で次のとおり行われます。

日時:2014年9月20日(土曜日)
会場:広島県広島市中区大手町1-5-3 サテライトキャンパスひろしま

http://www.ospn.jp/osc2014-hiroshima/

こちらにJPUGも出展致します。
また多くのエンジニアが一同に集まる大きなイベントです。
こちらも合わせてご参加をご検討していただきますようお願い致します。

と以上のとおりです。
そして今回のハンズオンは喜田さんの書かれた次の本を使いました。



この本、中を拝見しましたがかなりいいです!!
僕はこの勉強の後に買いました。
何が良いって
  • SQLの書き方のHow Toが書かれてる
  • しかもDB別でOKとNGの両方が書かれてる
  • 要所でDB間の違いやオプティマイザ等の動きの説明がある
点です。
やはりただ一つのやり方を知るよりも複数のアプローチを知っている方が応用が効きます。
更に他のDBとの差を知ることでより深く知識の研鑽になると共に記憶に深く根付きます。
特にMySQLとOracleとPostgreSQLと言う3大DBですから実務で出会うことは多々あるでしょう。
なので自分の得意なDBでは○○って書くけどOracleの時はどうすんの?みたいなときも非常に助かります。
ということでコレ本オススメです。


ということで第四回は非常に充実した内容でした。
次回はセミナー中心でハンズオンはありませんが超豪華講師陣です。
すでに今から楽しみで仕方ないです!!
次回も皆様と勉強会でお会いできるのを楽しみにしております。

2014年7月6日日曜日

PHPライブラリ&サンプル実践活用[厳選100]はすごく良い

タイトルの本読みました。




WINGSプロジェクト←こちらで本の概要がわかります

正直こういう本は一周遅れとか二周遅れの事が多いです。
それが呼んでびっくり バリバリ現役の内容 です。
で具体的に何処がいいかですけど

1 環境構築→インストール→利用までがしっかり流れでまとまってる。

実際にライブラリを調べる時はPHPerだとWebの情報を元にすることが多いと思います。
その際に


  • 環境構築のサイト
  • インストールのサイト
  • 使い方のサイト


をそれぞれ探して来て順にブラウザのタブを行き来しながらやる煩雑さ。
あれがありません。
ヘタすると使い方もバージョン依存だったりでハマり、それだけで何サイトも巡る...
そういうコストが全くないというのはストレスフリーですよね。
更に言うとGithubだったりComposerに対応してるものはそちらで紹介されています。
こういモダンなやり方を始めるきっかけとしてもいいと思います。

つかGithubは言わずもがな、ホントComposerはマジ便利なんでオススメです。
さらにさらにさらに!!
公式サイトからサンプルコード落とせます!!

サンプルコード

これは非常に助かる。
写経も勉強になるんだけど実際に使うときに書き直すのは億劫です。
でもサンプルコードがあるので

2 即実戦投入出来るサンプル

これはPHPに限らずライブラリあるあるなんですけど

Hello Worldが出来たらOK!

みたいな紹介サイトよく見かけます(ブーメラン)
この本はもう一歩踏み込んだところまでサンプルになってます。
グラフだと一つだけじゃなくて棒グラフだったりレーダーだったり。
しかも一つじゃなくて複数のライブラリを紹介することで

利用用途によって最適なライブラリを選定できる

ってのが強いです。
PHPの良い所でもあり難しいところに「どれを使えばいいのかわからない」ことあると思います。
そんなときHello Worldレベルだと違いがわかりません。
ですが一歩踏み込んだ紹介を複数個用意してくれてるので選定が非常に捗ります。
さらに試すときもインストールから実践までがまとまってるので動かすことがすぐ出来ます。
これで実際に「こんな事がしたいんだけど出来る?」っていう質問に「あーそれならあのライブラリ使えるんで○○時間くらいで出来ますよ。」と即答出来るようになるはずです。
「あーちょっとやってみないとわかんないです...」とか「やってみたら思った以上にハマっちゃって時間がかかりそうです...」って言うのとは全然違いますよね。

3 紹介されてる内容がイケてる

どんなに丁寧に紹介されてても実際に使うシーンが無ければ無駄知識です。
でもこの本は安心していいです。
WINGSプロジェクトの目次を見ても分かる通り、求められたシーンがあると思います。
さらにGoogleやAWSのAPIのように知ってると引き出しが広がるAPIも沢山紹介されてます。
実際に僕が使ったことがあるAPIやライブラリが多数紹介されてました。
逆に僕がこの本を読んで使い始めたライブラリも沢山あります。
列挙だけ紹介しますと

  • Faker(テストで使うようないい感じのダミーデータを作ってくれます)
  • PHP GitHub API(GitHubのリポジトリを参照したりできるので自動化が捗る!)
  • PHP Markdown(Marcdown形式をhtmlにしてくれる)

なんかがあります。
WebAPI系なんかは「おっコレ今度使ってみよ!」みたいなのが結構ありますね♪
またPHPUnitみたいな日頃から使ってるツールでも知らないことがあったり発見がありました。
家に置いてもよし、会社に置いても良しの一冊だと思います。





だたちょっと残念だなって思うところもあります。
例えばフレームワークについて。
これはそれぞれで1冊の本になるレベルですので仕方ないとは思いますがやっぱ紹介程度です。
なのでフレームワークは最近の流行りを知れる程度だと思います。
ただこの中で出てくるFuelPHPに興味がある方は以下の本がオススメですよ。

はじめてのフレームワークとしてのFuelPHP第2版

FuelPHPに関しては今一番まとまったシリーズです。
モダンなPHPの開発手法も網羅されてるのでフレームワークの外の部分でも勉強になります。

ということでこの本を見て開発意欲が刺激されたので何か作ってみようと思いました。
またこの本は会社に置いて都度参考にしようと思います。

2014年6月21日土曜日

デジタルサーカスに遊びに行ってきた

東京のお高いおしゃれの街青山にあるデジタルサーカスさんに遊びに行って来ました。

デジタルサーカス

そしてデジタルサーカスさんですが兎にも角にも

おしゃれ!

これですね。
応接間も綺麗ですしお仕事場も広くて個々の机もゆったりでした。
そしてデジタルサーカスに行った理由は@tomzohさんにお会いするためです。
@tomzohさんは新卒からずっとデジタルサーカスを支えてきたエンジニアの方で

CakePHPを使う人は是非とも読むべきレシピ本


の著者の方です。
@tomzohさんは非常に相手を引き出すのが上手でした。
僕が話を聞きにお伺いしてるのに気付いたら@tomzohさんに上手く転がされてました^^;
さらに


  • SNSを利用方法
  • エンジニア採用
  • 仕事を上手く回すポイント


については非常に含蓄が多い意見を聞かせていただきました。
デジタルサーカスさんは創立して15年と業界からすると老舗です。
やはり老舗なだけあって色々と「上手くいくには理由があるな」と感じましたね。
今後もデジタルサーカスさんは安心できる受注開発業者として大活躍すると感じました。

それと蛇足ですがスパ4で対戦しました。
かなりボコボコにされてセンスを感じさせる内容でした^^;
頭がキレる人は格ゲーが強いの持論はまた立証された結果ですねw
起き上がりの移動投げ対策を含め、ウル4ではケン対策しっかりしようと思います><

クレオフーガ(岡山)に遊びに行ってきました

先日(6/20)にクレオフーガに遊びに行ってきました。

クレオフーガがといえばキムキムを始め、イケてるRubyエンジニアが集まってるのが特徴です。
実際にOSH2014の実行委員長だった@mako_wisさんがcodeをバリバリ書いてましたね。
でクレオフーガに遊びに行って感じたことは


  • 女子大生がそこら中にいる
  • CTOの山口さんが非常にフレンドリー
  • 岡山大インキュベーションセンター内での繋がりも大事にしてる
  • 女子大生多い(大事なことなので二回言いました
  • 山羊がいる


と言う感じでした。
岡山大インキュベーションセンターは岡山の企業からするとかなりアツい選択肢でしたね。
またクレオフーガの「敢えて岡山でやる!」ってスタイルは素晴らしいと感じました。
今の開発体制は


  • 立地場所によるデメリットがすくない
  • 社員のコストが少ない(物価が安い
  • 東京と違って地震ない←


などのメリット以外にも


  • 競業他社が少ないので目立ちやすい
  • 他業者との繋がりが強い
  • コミュニティの力を借りたり援助が非常に効果的


とのこともおっしゃっていました。
そんな中では一番は

サービスが流行らなかったら会社が無くなる覚悟でやってる


って仰ってて「そりゃ勢いあるはずだわ」と納得の一日でしたね。
今後も岡山からのクレオフーガの勢いは止まりそうにないですね。

2014年6月5日木曜日

PHPでCSVから配列を作る

前回のエントリーで

symfony2でCSV出力(ダウンロード)する


を紹介したので対のCSVをArrayにするmethod置いときます。

public static function csv_string_to_array($csv_string)
{
    mb_language("Japanese");
    $buf = mb_convert_encoding($csv_string, 'UTF-8', "auto");
    $replace_buf = str_replace("\r\n", "\n", $buf);
    $lines = explode("\n", $replace_buf);

    $filter_lines = array_filter($lines);
    foreach ($filter_lines as $line) {
        $ret[] = str_getcsv($line);
    }
    return $ret;
}
改行を一度\nにしてからexplode()してます。
explode()を利用した理由は可読性がいいからです。
速度的にはループと大差ないです。
array_filterは空行を削除してます。
なので

1,2,3


2.3.4

みたいな時は間と末尾の空行を削除します。
あとはstr_getcsvで行の内容を取得します。

あと蛇足ですがなぜスネークケースかと言うと

PHPはmethod名の大文字小文字を見ない

ので_区切りにしてます。
現場からは以上です。

symfony2でCSV出力(ダウンロード)する

symfony2シリーズ第3弾です。
CSV出力、何かと言われて実装することが多いのではないでしょうか。
FuelPHPではRESTコントローラがCSV対応しており、配列渡すだけなので久しぶりに実装しました。
と言っても良くある実装なのでsymfony2でActionで呼ばれた時の場合でご紹介します。

public function exportAction()
    {
        $header = [
            'ID',
            '名前',

        ];
        $list[] = $header;
        //DBから呼び出した場合はgetArrayResultを使うか自分で$dataを整形して下さい。
        $list[] = [1,'hoge'];
        $list[] = [2,'fuga'];

        $csv = $this->convertArrayToCsv($list);

        $response = $this->render(
                "AcmeSampleBundle::export.html.twig", [
            'csv' => $csv,
                ]
        );

        //Excel対策でUTF-8からSJIS-winに変換
        $contents = mb_convert_encoding($response->getContent(), 'SJIS-win', 'UTF-8');

        //headerのSET
        $response->headers->set('Content-Type', "application/octet-stream; name=hoge.csv");
        $response->headers->set('Content-Disposition', "attachment; filename=hoge.csv");
        $response->setContent($contents);

        return $response;
    }


    //配列をCSVに変換。
    //文字列のエスケープをしてくれるのでfputcsv()を利用
    private function convertArrayToCsv($list)
    {
        $fp = fopen('php://temp', 'r+b');
        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }
        rewind($fp);
        $tmp = str_replace(PHP_EOL, "\r\n", stream_get_contents($fp));
        return $tmp;
    }

表示するTwig側(例ではexport.html.twig

{{ csv|raw }}

としてます。
rawを使わないとcsv内のクォートなどをエスケープするので忘れないでください。

CSVから配列にする場合のメソッドはこちらです。

PHPでCSVから配列を作る