きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

大都会とIT勉強会と私

本エントリは大都会岡山 Advent Calendar 2015の12日目のエントリです。

 

今年はコレといったネタを思い浮かばないし一昨日までノロで一家全滅とかしててそんな暇なかったのもあって、なにも用意できていません。 ので、年末らしく振り返りをしてみようと思います。

 

で、せっかくなので今年一年とかケチ臭いことを言わずに約8年くらい振り返ってみます。 8年。中途半端ですね。なんで8年かというと、僕が岡山でIT系の勉強会にかかわり始めたのがそのあたりから、なんです。 なので、振り返るのは僕が見てきた岡山のIT系勉強会とかコミュニティについてです。

 

振り返りといってもKPTとかそういう高尚な振り返りではなくて要するにおっさんの昔語りであって、いつにもまして完全にチラ裏誰得エントリです。 またその期間の岡山のIT系コミュニティを俯瞰するものではないし主観であってもすべて覚えてるわけもなく今振り返って頭に浮かんできたことだけです。 なので興味ない方は「今日の岡山ACはハズレだったなとか」 心の中で静かに唱えつつ明日の大都会岡山ACに期待しながらお休みくださいお疲れ様でした。

 

ここまで読んで「こいつ酔ってる?」と思った方、正解です。飲まずにこんなこと書けません。 なので、完全に殴り書きです。リンクとかまともにできてないと思います誤字脱字、事実誤認多々あると思います。 気が付いたところは後々訂正したいと思いますので、何かあればご指摘いただければと思います。

 

2005年~2006年ころ

「さっき8年つったのに何で2005年なんだよ小学校の算数からやり直せよもしくは今2013年かよ」とかいう突っ込みは酔っ払いには届きませんというわけではないのですが、そもそもの転機というかきっかけがあったのはこの年だったので、ちょっとだけここも振り返ります。

 

2005年の秋ころでしたか、私はそれまで勤務していたメーカー系SIerを退職してユーザー企業の情シスに転職をしました。その頃は私はIT系の勉強会というものはなんとなくかすかに存在を知ってるような知らないような感じで、参加するのはせいぜいOracleMicrosoftなどのベンダー系の技術セミナーとか程度。 転機が訪れたのは、2005年のちょうど今頃。大阪で同業をやってる大学時代からの友人の@MIZO に「2月にこんなんあるからいけへん?」と言われたのが翌2月に開催された『Developers Summit 2006』でした。

 

これがデブサミ初参加だったのですが、これは色々と大きな衝撃を受けました。このデブサミで得たこと一つ一つ書き出すと止まらないのでここでは割愛しますが、デブサミに参加していなかったら、おそらく今のような形でIT系のコミュニティにかかわってることはなかったんじゃないかと思います。今から思えば。 そしてここで、今までは「なんかそういうのがあるのは知ってる」程度だったIT系コミュニティというものが、具体的にどんなものなのかを知ることになりました。

 

とはいえ。 東京や大阪などでは勉強会などこの時期既に活発に行われていたようなのですが、あまり情報収集などもしていなかったこともあいまって、岡山の近所でのこういった勉強会のことを知らずに(数自体もあまりなかったはず)。 ここから2008年までは年一のデブサミTechED*1でそういった空気を味わう、というだけの日々でした。

 

2006年まとめ

 

2008年:OITEC立ち上げ

ここでようやく2008年の話になります。

 

ちょっと話がそれますが、Visual Studioをお使いの方。Visual Studioを起動すると何が見えるかご存知でしょうか? 2005以降のVSではスタートアップ画面に*2「お知らせ」としてマイクロソフトからRSS で配信されたblog記事やニュースレター等が並びますよね。今では英語の情報しか並んでませんが、当時は日本語の情報が普通に並んでいました。例えばMSDNニュースレターのヘッドライン的なものとかとかMS主催のセミナー情報とか。

 

たしか2008年1月だったか2月だったか、いつも通り出勤してとりあえずVisual Studio(多分VS2005)を起動して何の気なしに見てると、「岡山」という文字が目に飛び込んできたんですね。 当時*3岡山でMSがパブリックでオープンなセミナーをやることはそうそう無かったので、そんな中に飛びこんできた岡山の文字はすこぶる新鮮でした。

 

そういえばこのMSオフィシャルなチャンネルにコミュニティの勉強会情報なんかも流してたのは、原水さんの仕事…だったのかなぁ……。原水さんとは2年弱前に前に北陸でブリシャブやお寿司食べたきり……じゃないな、そのあと品川のMSの社員食堂でお会いしたきり……またお会いしてお話ししたいです。というのはちょっと置いておきます。

 

閑話休題。 (ちょっと横道が多すぎるのでぼちぼち逸れるのはやめておきます)

 

この2008年3月に開催されたのが、マイクロソフトINETAが開催した『コミュニティ勉強会に参加しよう~第 3 回・岡山編』でした。 その時の感想がこれ。 http://kiyokura.hateblo.jp/entry/20080322/p1

 

ここで、講師をしてくださった中さん、森さん、大野さん。岡山会場の幹事をし、のちにOITECを立ち上げた樋口さん。広島で.NET勉強会ヒーロー島の運営をし個人的にもお世話になっている松浦さん。今も一緒にOITECやお仕事でお世話になってる@ahiru_spにお会いしました。

 

そして夏。樋口さんが宣言通りにOkayama IT Engineers Community, OITECを立ち上げてそこに参加することになりました。 http://kiyokura.hateblo.jp/entry/20080810/p1

第二回となってますが、第一回は3月のヤツをカウントしてるから。そして、いきなりスピーカーデビューをしてました。怖いもの知らずですというか出しゃばりなのもいいところですね。 実は萩野さんや山手さんとお話しした最初の記憶はここだったきがします。……違ったかな?

で、OITEC第三回がこの11月。

あとは岡山の話ではないので詳しくは割愛しますが、この間に大阪のSilverlightを囲む会やわんくま同盟の勉強会などにもちょくちょく参加するようになりました。これは3月の勉強会で中さんや森さんと直接お話ししたことが直接のきっかけでした。大阪ではさおさんやみつばたん、青柳さん、ちゅきさん、かるぼさん、黒龍さん……いろんな人とお会いすることできました。

人生初のコミュニティ勉強会参加、初のコミュニティ運営への参加、初の講師登壇、初の大阪のコミュニティ勉強会に参加等々、2008年はいろんなことが一気に来た年でした。 そういえば嫁と付き合い始めたのも2008年で、これは直接は関係ないもののSilverlightを囲む会に参加したことが一因になっています。SiverlightとC# はじめたら彼女ができて結婚できたよ的な。が、まあこれはどうでもいい話なので割愛。

 

個人的大都会の2008年まとめ

  • INETA - コミュニティ勉強会に参加しよう~第 3 回・岡山編
    • IT勉強会初参加
    • ここでの話をきっかけに大阪の勉強会に参加するようになった
  • OITEC
    • OITEC発足(7月、ただしさかのぼって3月のアレを第2回に)
    • 運営に参加
    • 第2回からスピーカーとして登壇
  • 当時は自分は知らなかった話
    • オープンセミナー岡山の第一回が開催された
    • 忘年会議(座スタジアムに移る前)が開催されていた
    • 瀬戸内Linux User Group(通称瀬戸LUG、stlug)を通して瀬戸内地方では色々活動が行われていた
    • 多分、西日本アジャイルプロセス協議会のセミナーも開催されていたはず

 

 

2009年:オープンラボと忘年会議初参加

この年、オープンセミナー岡山の第二回が 開催されたり、ひらさんたちがオープンラボ岡山を立ち上げたりと、岡山のIT系コミュニティとしては結構重大なことが起こっていたのですが、このころの私はこちらとは距離を置いていたというかそもそも知らない状況でした(なにかの告知でオープンセミナー岡山は知っていたのですが、たしか予定がかぶっていけなかった)。

 

OITECや相変わらず大阪の勉強会に出かけていた記憶があります。

 

12月。 このエントリにあるように、12月にはいろいろありました。 http://kiyokura.hateblo.jp/entry/20091214/p1

 

岡山でのことを思い出すと。

まず、西日本アジャイルプロセス協議会のセミナーに参加しました。そういえば後から知ったのですが、このセミナーには横山さんも参加していた模様。当時はまったく認識がありませんでした()

 

そして。 ここでオープンラボ岡山と、その日に開催された忘年会議それぞれに初参加しました。 ここがまた大きなターニングポイントになりました。

 

その日のオープンラボ岡山の様子はこちら。 http://openlab.okaya.ma/wiki.cgi?page=%CA%D9%B6%AF%B2%F1%2F%C2%E8005%B2%F3 僕は午前のガウディ本読書会には参加せず、午後から参加でした。 増田さんのMapReduceの話は当時先端というかすごく面白かったのを覚えています。

この年の忘年会議は座スタジアムに場所を移しての最初の会だったそうです。くしくもその場に居合わすことができて今から思えば光栄でした。 ひらさん、芝先生、白石先生、大垣さん、増田さん、三輪さん、弓本さん、中本さん、藤原さん……列挙できないほどおおくの皆さんとここで会うことできました。

 

そういえば、ひらさんは最近は農業に転向してIT系のコミュニティにはあまり参加されなくなっているのはご周知のとおりだと思うのですが、実はウチの実家に行くとたまに来てて会えたりします(誰得情報)。つい昨日も用事があって実家の農作業場に行ったらひらさんがいて新鮮な白菜をいただきました()

 

個人的大都会の2009年まとめ

  • OITEC
    • 順当に勉強会を実施していた
  • 西日本アジャイルプロセス協議会 岡山セミナー
    • ワークショップなどに参加
  • 第5回オープンラボ岡山
    • オープンラボ岡山初参加
  • 忘年会議2009参加
    • 初参加
    • この年から座スタジアムに
    • このとしの参加者は30名足らず
  • 当時は自分はかかわっていなかった話とかうろ覚えの話
    • オープンセミナー岡山2009にも未参加(知っていたが予定が合わず)
    • 花田さんが岡山Javaユーザ会を立ち上げたのが確かこの年だったような(うろ覚え)
    • Χ-Lab 発足
      • かいらぼ。
      • のちにオープンラボとか繋がりで中の人とはつながったけど勉強会に参加はできなかった気がする

 

 

2010年:オープンセミナー初参加

この年の2月にはすくすくスクラム瀬戸内が開催されました。 ここでは、前川さんや阿部さん、当時MSにいた長沢さんに出会いました。 ちなみに阿部さんとはこのときはほとんど話をしていなかった気がしますが(がっつり話すようになったのはその後のすくすくや、前川さんがたまに開催していたスクラムナイト岡山(だったかな?)という名前の飲み会だった気がします)、まさか5年後に同じ職場で仕事してるとはお互い思ってなかったはずw

 

それからオープンラボ岡山にもちょくちょく参加するようになり、何度かお話にさせてもらったように思います。ここでも沢山の方たちと出会いました。

 

そしてこの年、オープンセミナー岡山に初参加。 この年のオープンセミナーはまつもとゆきひろさんを講師に迎えたこともあって、190人の大盛況。懇親会も大盛況でカオスを極めた記憶が。

 

実はたしかこの懇親会で軍団長を認識した記憶があります。あ、当時はそういう呼称ではありませんでして、この尊称が生まれるのはもう少し後になります。ただこのときは直接はお話ししてなくて、その機会が訪れたのはこの後のスクラムナイト岡山……だったか岡Webだったか曖昧です。

この年の大都会的な大きなトピックとしては、後藤さんが岡山WEBクリエイターズを立ち上げたのがこの年の4月。私は8月の会から参加。また横山さんがマネージャとなり、中国GTUG(Google Technology User Group)、現Google Developer Group中国が立ち上がりました。こちらの勉強会にも参加。

 

この年も色々ありすぎて細かいことが思い出せなかったりするのですが、改装中のひら家で鍋やってχラボ をやっていたの@akagishoと話ししたのはこの年の年末だった……かなぁ……。で、 @uadachi はバイトでこれなかったんだっけ……?

 

個人的大都会の2010年まとめ

  • OITEC
    • そこそこ順当に勉強会を実施していた気がします
  • オープンラボ岡山
    • 気が付いたら常連になってきた気がする
    • スピーカーも何度かやらせていただいたような気がする
  • すくすくスクラム瀬戸内
    • 発足、第一回に参加
  • 中国GTUG発足
    • そこそこ普通に参加していた記憶
  • オープンセミナー2010@岡山
    • 初参加
  • 岡山WEBクリエイターズ 発足
    • 8月の勉強会から参加
  • 忘年会議2010
    • 普通に参加してた記憶
  • ひらさんがひら家を自力改築
    • 「リアルオープンラボ岡山」という呼称だったこともあった気がする
    • 寒い日の晩にブルーシートとか木材だらけの中で鍋やった記憶
  • WEB-APP-NIGHT-OKAYAMA
    • 通称『きよくら会』
    • すでに黒歴史()
  • 当時は自分はかかわっていなかった話とかうろ覚えの話とか
    • 天領倉敷Scala発足
      • オープンラボつながりで知ってたけど、なかなか予定が合わずにこの年は参加したことなったはず
    • 岡山Ruby, Ruby on Rails勉強会
      • オープンラボあたり繋がりで知ってはいたがたぶん参加してなかった記憶

……こう見るとかなり節操ないですな

 

 

2011年:オープンセミナー岡山・副委員長

この年、オープンセミナー岡山の実行委員長だったひらさんより、副委員長を拝命。この年のオープンセミナーはメインゲスト講師にOracleJavaエバンジェリスト寺田さん、Googleの松尾さん、MSから荒井さんと前年に劣らず豪華な感じで盛況だった記憶があります。 また裏?のテーマとして「岡山のコミュニティ勢ぞろい」的なものがありました。 実はこのあたりはひらさんとそして私の思いもあったり。私自身、2010年と2011年、岡山のいろんなコミュニティをつなげてやろうと、まあ、自分で思っても節操のない感じであっち行ったりこっち行ったりとうろうろしていた記憶があります。

 

この年の秋には大月さんと前川さんによりOkayama.jsが旗揚げされ、第一回目の勉強会を開催。私もLTで登壇させていただきました。ただし、軍団長という呼称が生まれるまではもう少しの時間を要します。

@zephiransasによって生まれ変わった岡山Javaユーザー会 が再始動した年でもあります。この会は僕は確か参加できてなかった気がしますが、翌年にはビデオカメラ担いで撮影に行った気がしなくもなく。

12月には岡山PHP勉強会が立ち上がって、第一回勉強会を開催。

そういえば、今では恒例になっている合同勉強会in大都会岡山の前身(といってもいいよね)、『春の合同勉強会 in 岡山』を開催しました。

 

そしてこの年、みなさんの記憶にもまだ新しい東日本大震災がありました。 じつは震災が起こった日はちょうどオープンセミナー岡山の打ち合わせがあった日。 ひら家*4打ち合わせが終わったあと、何人かで残ってフラカッソでワンセグのニュース映像を見ていたのを思い出します。・

その影響でいろんなイベントが中止になったり延期になったり(MS的にはTech・EDが中止になりそれ以降開催されなくなりました)、自粛ムードが漂ったり。ただそんななか、地方のコミュニティーで活気はなくしたくない、と思ってイベントを企画していたことを覚えています。 震災に対するアクションとしてHack For Japanのようなイベントも立ち上がり、岡山でも開催されていました。

 

個人的大都会の2011年まとめ

  • OITEC
    • まだ順当に勉強会を実施していたのではないでしょうか(たぶん)
  • オープンラボ岡山
    • もはや常連
    • ただしこの年でいったん今までの形式の開催を終了
  • すくすくスクラム瀬戸内
    • Agile Japan 2011 サテライト岡山に参加した
  • 中国GTUG発足
    • そこそこ普通に参加していたと思う
  • オープンセミナー2011@岡山
    • 副委員長として運営に参加
  • 岡山WEBクリエイターズ
    • 多分そこそこ参加
  • CSS Nite in Okayama
    • 岡山初開催のCSS Nite in Okayama
    • スタッフとして参加
  • 岡山PHP勉強会
    • 発足、第一回勉強会に参加
  • 春の合同勉強会 in 岡山
    • 合同勉強会in大都会岡山の前身
  • 忘年会議2011
    • 普通に参加してた記憶
  • Okayama.js
    • 秋に発足
    • 第一回勉強会に参加、LT登壇
  • 当時は自分はかかわっていなかった話とかうろ覚えの話とか
    • 岡山Javaユーザー会が活発に活動開始

……他にもいろいろあった気がするのですが正直色々やりすぎてて思い出しきれないありさま()

 

 

2012年:オープンセミナー岡山・実行委員長

そしてこの年はオープンセミナーの実行委員長を拝命。 この年のゲスト講師は@t_wada@dankogaidankogaiは実行委員からの推薦で、t-wadaは僕がどうしても前年のデブサミでした話を、岡山のエンジニアの前でしてもらいたかったというわがまま。 個人的にはすごく成功だったと胸をなでおろしていたりしてるので、まあなんな思うところがある人もいるかとは思うけど昔のことなのでそっとしておいてください。

 

この年も岡山では色々あって、Webフロント界隈としてはCSS Nite in Okayamaが開催されて相変わらず出しゃばりは私は実行委員に名を連ねていたりしました。

またt_wadaの前でやるよ宣言をした阿部さんにより、TDD BootCamp 岡山開催。

Okayama.jsではようやく軍団長という呼称が正式に生まれたり、パソコン交流会こと岡山git勉強会が立ち上がった年でもあります(この年は私はパソコン交流会には不参加だった記憶)。

そういえば天領倉敷Scalaに私が初参加したのはこの年の6月でした。

PHP勉強会でもなにかしゃべらせていただいた記憶があったりなかったり。

この年も相変わらず色々ばたばたしていた気がします。

 

個人的大都会の2012年まとめ

  • OITEC
    • このあたりから勉強会をどれくらい開催していたか割と謎()
  • オープンラボ岡山
    • 英会話縛りの会をひら家でやったのち、休止
  • 中国GTUG発足
    • そこそこ普通に参加していたと思う
  • オープンセミナー2012@岡山
    • 委員長を拝命
  • 岡山WEBクリエイターズ
    • 多分そこそこ参加したのでは
  • CSS Nite in Okayama
    • 4月と7月に開催した記憶
    • スタッフとして微妙に参加
  • 岡山PHP勉強会
    • スピーカーとして登壇したよ
  • 春の合同勉強会 in 岡山
    • 合同勉強会in大都会岡山の前身
  • 忘年会議2012
    • 普通に参加
  • Okayama.js
    • 偉大なる「軍団長」爆誕
  • TDD BootCamp 岡山1.0
    • スタッフとして参加
  • 岡山Javaユーザー会
    • 勉強会に参加
    • セッションの録画をした記憶
  • 天領倉敷Scala
    • 勉強会に参加
    • ビデオカメラ買ったのがうれしくて機材担いで録画いった記憶
  • 当時は自分はかかわっていなかった話とかうろ覚えの話とか
    • 岡山Ruby会議01開催
    • 岡山git勉強会
      • なんで参加できなかったのかは覚えておらず

 

……絶対もっといろいろあったはずだけどもう疲れて何も思い出せないよパトラッシュ……

 

疲れたのこでここまで

まだ2012年までしか振り返ってませんが、……ここまで書いてもう疲れたのといい加減お酒も抜けて来て色んな意味でしんどくなってきたので、いったんここまでにして続きはまたいつか書くことにします(たぶん)。

 

酔っ払いの与太話なので特にオチやまとめはありません。

が、こうしてみると、本当にいろんな人にお会いしていろんな影響を与えいていただいた、そのおかげで今の自分があることを改めて実感できます。

 

しかし私自身はこれらの活動を通じて皆さんに少しでも何かお返しすることができていたのでしょうか。もしそうだと嬉しいですね。

 

ということでここまで読んでくださった奇特な方、ありがとうございました!!!!

*1:日本マイクロソフトが2010年まで毎年開催して大規模な技術カンファレンス。震災のタイミングで中止されましたが、現在はその流れをくむイベントがde:codeという名前で開催されています

*2:バージョンとかカスタマイズ具合によって変わってきたりはするのですが

*3:というか今も

*4:当時ひらさんが持ち家を改装してセミナーハウス?にしようと画策していた物件

ExcelとT4 と私とLinq to Excel

本エントリはC# Advent Calendar 2015 の11日目の記事です。

 

Excelからソースコードの自動生成というと何やらSIerめいた感を受ける方もおられるかもしれません。が、例えばExcel形式のデータベース定義などはコトの進め方によって普通にありだと思いますし、『柔軟なスキーマ定義ができ利用者の間口が広い高機能な編集ツールがあり場合によっては印刷や処理の自動化にも様々な方法で対応できるしかもオープンな規格*1のフォーマット』と捉えれば、やはり優秀なフォーマットだと言わざるを得ません(異論は認める)。 (個人的にはgitと親和性の高いdiffとマージを行う手段があれば割と満足というかそこが最大の難点*2

 

まあぶっちゃけそんなことは割とどうでもいい話で、何らかのコンテキストによってExcelからのソースコード自動生成が必要になった/それが最善だと判断したケースがあるとしましょう。きっとありますよ、そういうことも。

 

Excelの内容からコードを自動生成するにはいくつかアプローチがあると思います。 今回はT4からLinq to Excelを使う方法を紹介してみます。

 

Linq to Excel

その名のとおりExcelに対してLINQの文法でクエリを書けるものです。

オフィシャルなリソースはこちらあたりを参照

linqtoexcel - Use LINQ to retrieve data from spreadsheets. - Google Project Hosting

github.com

CSVから読めたり簡単にクラスとマップできたりと色々機能がありますが、そのあたりは割愛しますのでgithub上のreadmeをざざっと読んでもらえればと。

内部的にはJetまたはACEのOLEDBドライバを使ってアクセスしているようです。つまりはADO.NETのラッパー的な。

 

T4からLinq to Excel を使う

さて、ここからが本題です。T4からでもLinq to Excelを使うことも可能です。

T4とはVisual Studioで利用できるテキストテンプレートエンジンです。T4自体についての詳細はこの辺りを参照:コード生成と T4 テキスト テンプレート

 

Linq to Excelのインストール

Linq to ExcelそのものはNuGetでパッケージが提供されているのでパッケージインストーラーから簡単にインストールできます。

> Install-Package LinqToExcel

……できるんですが、現時点(LinqToExcel 1.10.1)では、log4netの参照周りでちょと問題があります。それについては後述。

 

参照の解決

T4からLinq to Excelを使いたい場合、LinqToExcel名前空間のインポートと、以下の依存するアセンブリの参照を行わないと怒られます。

  • System.Data
  • System.Data.DataSetExtensions
  • log4net.dll
  • Remotion.Data.Linq.dll
  • Remotion.Interfaces.dll
  • LinqToExcel.dll

特に下4つのdllの参照をどうするか……ですが、色々考えだすと面倒なので、適当にフォルダを作って必要なdllをすべてコピーしておき……

f:id:kiyokura:20151211222327p:plain

こんな感じで参照してやるほうがもう手っ取り早くて楽でよい気がしています。

f:id:kiyokura:20151211222341p:plain

……ズボラですかね:p

 

LinqToExcelを使ったコード

あとは実際にLinqToExcelを使ったT4を書けばよいだけです。 例えば、以下のようなテーブル定義ちっくなのExcelファイル「Def.xlsx」(シート名:People)があるとして。

項目名 サイズ 和名
Name NVARCHAR 50 氏名
Age INT 年齢
Email NVARCHAR 255 メールアドレス
Salary money 給料

以下のようなT4を書けば…

<#@ template debug ="false" hostspecific="true" language= "C#" #>
<#@ assembly name ="System.Core"  #>
<#@ import namespace ="System.Linq"  #>
<#@ import namespace ="System.Text"  #>
<#@ import namespace ="System.Collections.Generic"  #>
<#@ output extension =".cs" encoding="utf-8" #>

<#@ assembly name ="System.Data"  #>
<#@ assembly name ="System.Data.DataSetExtensions"  #>
<#@ assembly name ="$(ProjectDir)Lib\log4net.dll"  #>
<#@ assembly name ="$(ProjectDir)Lib\Remotion.Data.Linq.dll" #>
<#@ assembly name ="$(ProjectDir)Lib\Remotion.Interfaces.dll" #>
<#@ assembly name ="$(ProjectDir)Lib\LinqToExcel.dll"  #>
<#@ import namespace ="LinqToExcel"  #>
<#
  var xlsxPath = @"C:\Def.xlsx"; // フルパス
  var sheetName = "People";

  using(var excel = new ExcelQueryFactory(xlsxPath)){
    excel.ReadOnly = true;
    var columns =  excel.Worksheet<ColumnDef>(sheetName);
#>
public class People
{
<#
    foreach ( var column in columns){ #>
  /// <summary>
  /// <#= column.和名 #>
  /// </summary>
  public <#= GetType(column.型) #> <#= column.項目名 #> { get; set ; }

<#
    }
#>
}
<#
  }
#>
<#+
  // ここから下は本題じゃないので気にしないで下さい()
  static string GetType(string type){
    switch(type.ToUpper()){
      case "NVARCHAR":
        return "string" ;
      case "INT":
        return "int" ;
      case "MONEY":
        return "decimal" ;
      default:
        // 必要なマッピングは随時追加する雰囲気
        return "string" ;
    }
  }

  class ColumnDef {
    public string 項目名 { get ; set; }
    public string 型 { get ; set; }
    public int? サイズ { get ; set; }
    public string 和名 { get ; set; }
  }
#>

以下のようなC# のコードが自動生成されます。

public class People
{
  /// <summary>
  /// 氏名
  /// </summary>
  public string Name { get ; set; }

  /// <summary>
  /// 年齢
  /// </summary>
  public int Age { get ; set; }

  /// <summary>
  /// メールアドレス
  /// </summary>
  public string Email { get ; set; }

  /// <summary>
  /// 給料
  /// </summary>
  public decimal Salary { get ; set; }

}

……全然LINQのメリットを生かしてないサンプルコードですが、特にマッピングを定義することも無く、シート中の列名っぽいのとメンバ名を合わせたクラスを用意してファイルとシート名を指定して呼び出すだけで、さくっとマッピングして読み込んでくれるあたりは感じ取っていただけるのではないかと思います。

 

エラー対処というかはまりどころというか……について

T4…というよりLinqToExcelを使おうとすると、いくつかはまりどころがあるかもしれません。

 

log4netのバージョンが……

現在、LinqToExcel 1.10.1をNuGetでそのままインストールして利用すると、以下のようなエラーが出ました。

変換を実行しています:System.IO.FileNotFoundExceotion: ファイルまたはアセンブリ'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'、またはその依存関係の1つが読み込めませんでした。指定されたファイルが見つかりません。

ファイル名 'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' です。'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'

場所 LinqToExcel.ExcelQueryFactory..ctor(String fileName)

......

f:id:kiyokura:20151211222522p:plain

どうやら、LinqToExcelのパッケージがのlog4netの特定の(古い)バージョンに依存しているにもかかわらず、nuspecで最新のlog4netをインストールするように設定されているために起こっている齟齬です*3

とりあえず以下のようにやることで対処は可能です。

  • 一旦LinqToExcelのアンインストール
  • バージョンを指定してlog4netのインストール
  • LinqToExcelのインストール

lg4net 1.2.13はNuGetのパッケージでは2.0.3ですので、こんな感じで入れてしまいましょう。

Install-Package log4net -Version 2.0.3

ひとまずは現時点ではこれで動きました。

 

Microsoft.ACE.OLEDB.12.0' プロバイダーはローカルのコンピューターに登録されていません

別の例外でm

変換を実行しています:System.InvalidOperationException: 'Microsoft.ACE.OLEDB.12.0' プロバイダーはローカルのコンピューターに登録されていません。

場所 System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)

場所 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)

......

となった場合は、内部的に使っているOLEDBプロバイダがインストールされていません(そのまんま)。これはMS-Officeに付属するものですが、単体でダウンロードしてインストールすることができます*4

Download 2007 Office system ドライバ: データ接続コンポーネント from Official Microsoft Download Center

なお、PCが64bitであっても、32bit版である必要があります*5

 

まとめ

ということで、T4からLinqToExcelを使ってExcel内の情報からコードを自動生成する方法を紹介してみました。

……が、改めてこれを書きながら冷静に見ると結構微妙という気になってきた気がしなくもない……ですが、一度導入してしまえばADO.NETとDapperあたり組み合わせるよりも手数が少なくて済むと思いますし、使う意味はあると思います。きっと。

log4netの変なバージョン依存だけはどうにかしてほしいですが、このプロジェクト年単位でメンテされてない感があるので(実際log4netの件はPRも来てるけど処置なし)、もう自分フォークしてビルドしたの使ったほうがいいんじゃないのという気がしてきたりもしたのでぼちぼちこのあたりで終わりたいと思います()

*1:2007以降のxlsx等の形式はOffice Open XMLというれっきとしたオープン企画です一応

*2:現状はOffice 2013 ProとかについてるSpred Sheet Compare とか使うとなんとかいけるかという感じ http://nasunoblog.blogspot.jp/2013/04/spreadsheet-compare.html

*3:プロジェクトファイルでのSpecificVersion=Falseの意味を取り違えているかnuspecの設定で意識していなかったのどちらかでしょうか

*4:これは@ahiru_spが遭遇したことで把握しました

*5:T4を実行するVisual Studioが32bitプロセスであるためだと思います

ASP.NET WebHook (Preview)を試してみた

本エントリはASP.NET Advent Calendar 2015の1日目のエントリです。 今年はなぜかASP.NET Advent Calendar 2015を立てることになったので(とはいえ言い出しっぺではありません)、とりあえず1日目を担当させていただきます。

 

ASP.NET WebHooks

少し前のことですが、ASP.NET の新しいフレームワーク?として、ASP.NET Web Hooks (Preview)というのが登場しました。 f:id:kiyokura:20151130235836p:plain

 

アナウンスのエントリはこちら:
Introducing Microsoft ASP.NET WebHooks Preview

 

Webフック(WebHooks)とは?

WebHooks(Webフック)とはWebサービス同士を連携させるパターンというか方式というか……などど僕が説明するまでもなく、githubやSlackなど、開発者が利用するサービスではをはじめ色々なwebサービスで利用されているものですね。

参考:Webhook - Wikipedia, the free encyclopedia

 

そういえば、去年のASP.NET Advent CalendarでVS Online(現Visual Studio Team Services)のService Hookを受け取るサンプルを作ったエントリ書きましたが、まさにこれですね。

ASP.NET MVC と Azure Web Sites で VS Online のカスタムService Hookを作成してサクッとリモートデバッグする - きよくらの備忘録

 

ASP.NET WebHooksとは

詳細は上記のアナウンスのエントリや、少し前にいさみさんが翻訳されたInfoQの記事などを読んでいただくのが良いと思いますが、ざっくりいえば、

  • (いろんなWebサービスの)Webフックによる通知を受信する機能をサクっと実装する
  • 自分でWebフックを発行する機能をサクっと実装する

ためのインフラを提供するライブラリというかフレームワーク…ととらえて貰えれば良いように思います。

現時点では、 ASP.NET Web API 2 と ASP.NET MVC 5、つまるところ.NET Framework 4.xがターゲットになっているようです。

 

Receiverによるサービス対応

受信側の機能はサービスごとにReceiverを作成することで、プラガブルかつ再利用可能な形でいろいろなサービスに対応できる構造になっています。 現時点でも以下のReceiverが実装・NuGet経由で提供されています。

  • for Azure WebHooks
  • for BitBucket
  • for Dropbox
  • for Github
  • for MailChimp
  • for Paypal
  • for Pusher
  • for Salesforce
  • for Slack
  • for Stripe
  • for Trello
  • for Wordpress
  • for your custom WebHooks implementation
  • for generic WebHooks with special validation logic or security requirements

Visual Studio Onlineに対応したWeb Hooksが無い当たりどうよ、とは思いますがまあ言わないでおきます*1。 もちろん上記のようなドンピシャのReceiverが存在しないサービスであっても、RESTなWeb Hooksのサービスであれば最後の二つのパッケージを利用して(一からやるよりは)楽して実装できそうですし、オリジナルのReceiverを実装することも可能です。

また、Visual Studio 2015向けのExtension、ASP.NET WebHooks Connected Serviceもリリースされています。 このExtensionを利用すると、受信したいサービスを選択するだけで必要なReceiverのパッケージを取り込むなどの下準備を整えてくれます(後ほど実際に試してみます)。

 

もちろんOSS

ASP.NET Web HooksはもちろんOSSで、github上のリポジトリはこちら。 aspnet/WebHooks

Receiverのソースも含まれているので、独自にReceiverを実装する場合も参考にすればよさそうです。

 

リソース

オフィシャルなリソースを以下に整理しておきます。チュートリアル的な記事もあるので軽く目を通して手を動かすのもよさそうです。

 

試してみる(Slack連携)

ではさっそく、少し試してみます。 公式のエントリにもありますが、まずはSlackでサクっとやってみます。

*1:言ってる

続きを読む

Visual Studio 2015ではPowerPoint用ストーリーボード・アドオンが下位エディションでも使える

便利…だけどお高かった『ストーリーボード』機能

アプリケーションの画面デザイン案なんかを簡単に作成できる、PowerPoint用のストーリーボーディングのアドオン。こんな感じで、部品をドラッグアンドドロップでペタペタ張って画面のプロタイプを作成していく…とかできるやつです。

f:id:kiyokura:20151023002332p:plain

しばらく前から存在しているのですが(2012年ころ?)、元々Visual Studioの高価な上位エディション*1に付属するアドオンで、『知ってるけどウチの環境だと使えないし…』という人も少なくなかったと思います。

 

そんなあなたに朗報です!

 

無償版のVSでも利用できるようになった!!

このストリーボード、Visual Studio 2015では、下位の Professional どころか無償の Community エディションでも利用できるようになりました。

(……というのを今日の今日まで私もすっかり忘れていたわけですが)

 

ということで。 MSDNなどでVS2015のライセンスを持っているようでしたら、『まだ開発環境はVS2013から上げれないのよ……』というような方でもとりあえずVS2015をインストールだけしてストーリーボードだけ使うのもアリなじゃないかと思います。

Visual Studio Community 2015 でも利用出来る…のですが、使用許諾条件が私には良くわからない(VSに付属するものなのでVSの利用条件が適用されてもおかしくない気がする/VS Community 2015 の企業利用には条件がいろいろある)ので、企業で利用する場合はこのあたり気を付けたほうがよさそうです。(※企業内でも普通に使えそうな雰囲気です。末尾に追記しました。)

もちろん個人ユーザで委託業務とかで使わない分には何も気にすることは無いと思いますので、そういった方はぜひCommunityで。

 

何にせよExcelのオートシェイプやフォーム部品(!)*2を組み合わせて資料をでっちあげたりしてる方は、これを使えるとずいぶん捗るのではないでしょうか!

参考情報: PowerPoint を使用したアイデアのストーリーボード

 

追記

@kkamegawaさんに教えていただいたのですが、VS Commuity 2015でいれた場合でも、ストーリーボードアドオンの使用許諾はVS側とは異なるようです*3

Licensing and packaging changes for TFS 2015 - Brian Harry's blog - Site Home - MSDN Blogs

関連するところを抜粋してみます。

Storyboarding

With the 2015 release, we have decided to make our Power Point based storyboarding tool available for free (it was previously only available in Test Professional with MSDN, VS Premium with MSDN and VS Ultimate with MSDN). 
For now, we have included it in VS 2015 Community. 
When the new “Office integration” installer ships in the TFS 2015 Update 1 timeframe, we will include the storyboarding tool there as well to make it even easier to access.

ざっくりかいつまむと、

  • パワポのストーリーボード機能をフリーにするよ!
  • 当初は(無償版は)VS 2015 Communityに同梱するよ!
  • TFS 2015 Update 1リリースのタイミングで新しいOffice統合installer(?)を出すよ!

ということで、なので、VS Cimmunityでインストールされた場合でも、特に気にすることなく使えそうな風に読めます。

またTFS 2015 Update 1はちょっと前にRC1がリリースされました。ですので、もう少したらVisual Studio同梱ではない、単体のインストールパッケージがリリースされるっぽいです。

*1:と特定のTFSのエディション

*2:画面設計書.xlsにフォーム部品をならべて作っておいて「印刷時にずれるんだけど」と憤ってた人を見たことあります

*3:ただし、具体的に使用許諾がどんなものかは見つけれていません

10月のWindows UpdateでOneDrive for Businessで同期エラーが出ることがあるので注意(修正パッチあり)

本日…というか先週末あたりから微妙にOneDrive for Businessの調子が悪く、ファイルによってはさっぱり同期できない状況が続いていました*1

[同期の問題の表示]を表示するとこんな感じで、「資格情報が必要です」「資格情報を入力してください」と出ます。

f:id:kiyokura:20151023000743p:plain

環境は Windows 8.1 + OneDrive for Business 2013, OneDrive for Business はOffice 2013 Pro Plusのもの(俗にいうMSIインストーラー版)です。

 

ちなみに上記ダイアログをクリックしても資格情報入力ダイアログは表示されませんし、そもそもフォルダの同期はできているので本当に資格情報がないのか怪しいところです。

 

試行錯誤編

とりあえず[修復]を実行したのですが、結果から言うとNG。しかも、今まで同期できていたファイル類もこの過程で一度同期を解除してローカルから削除されたため、その後一切取得できなくなってしまいました(フォルダのみ作成され、ファイルは全て同期失敗して空、という状態)。

 

フォーラムやサポート情報などを検索しながら色々やってみたのですが、さっぱり解決しませんでした。ログアウトしてブラウザのキャッシュも消して資格情報も削除してOneDrive for Businessのキャッシュをして、挙句にはOneDrive for Business自体も再インストールして……。

 

それでもさっぱり直らず、途方に暮れていたところ……。

 

解決編

そんな折、O365側の管理コンソールをチェックしてくれていた id:sadynitro が該当しそうなKBを見つけてくれました。

October 21, 2015, update for Office 2013 (KB2986219) *2

……これやがな。というか10月21日って、現地時間的に出来立てほやほややないか……。

ということで、上記KBのリンクにあるパッチを適用すると解決しました!

 

まとめ

ということで、2015/10 月の月例のWindows Update 適用以降で OneDrive for Business の同期で問題が出るようになった場合は、上記KBの事象に該当している可能性があります。 (問題を引き起こしたKBは https://support.microsoft.com/en-us/kb/3085566 です)

そのうち問題解消のパッチもWindows Update から入手できるようになるかもしれませんが、現状はまだのようですので、該当する方は確認してみて下さい。

*1:ファイルによっては同期できていた…のですが、今から思うと OneDrive for Business じゃなくて、 WordやExcelファイルのアプリで直接開いて編集・同期してた分がうまくいっていた、という気がする

*2:日本語の機械翻訳がめちゃくちゃなので英語のリンクを張っています。en-usをja-jpに変えれば日本語になります