書評 | テスト駆動開発(オーム社)

https://www.ohmsha.co.jp/book/9784274217883/

本書は、残念ながら絶版になってしまった「テスト駆動開発入門(ピアソン・エデュケーション)」を、日本におけるTDDの第一人者である和田卓人氏(@t_wada)が訳しなおしたものです。

しかし、本書はただ訳が新しくなっただけではありません。

  • サンプルコードの強化
    • 言語とテスティングフレームワークが執筆時の最新バージョンに!
    • サンプルコードの変更箇所がわかりやすく明示されるように!
    • TODOリストも箇条書きでわかりやすく!
    • 各章の最後にその省のサンプルコード全掲示!
  • 付録C「訳者解説:テスト駆動開発の現在」
    • 原著が出版されてからこれまでのTDDの経緯を和田さんが書き下ろし

といった特徴があります。この辺りは、和田さんのエントリや、ajito.fmの和田さん登場回などでも詳しく説明されていますので、そちらをどうぞ。

このエントリでは、これらのことを踏まえつつ、私が読んで思ったことを書いていきます。

訳註が最高!

本書を読んでいて、地味に素晴らしいと思ったのは、「訳註」の存在でした。

色々な人が本書のレビューを書いていますが、訳注に触れたものはあまりありませんでした。しかし、この訳註こそ、陰ながら読者を支える非常に重要な役割を果たしていると思います。

例えば、

  • 初出する用語について補足する
  • コードを変更してテストを実行した際の挙動を補足する
    (「ここで実行すると○○と××が失敗するが、□□を実施して実行すると成功するようになる」)
  • 過去のバージョンを対象とした記述について現在はどうであるのか補足する

といったケースがいくつも追加されています。これがあることで、読者は書籍を写経しながら読み進めながらも、迷いなくより現実にあった形を知ることができるようになっています。

おそらく、この訳註は本書の執筆中に著者、レビュアー、編集者とで何度も調整されたものでしょう。関係者の努力にただただ感謝するばかりです。

参考文献も最高!

本書は「テスト駆動開発」という「開発手法」を解説していることもあり、「設計原則」、「パターン」、「テスト手法」、「開発プロセス」など、多くのことを扱っています。そのため、それぞれについてより深く扱っている各種の書籍を、本書の「参考文献」から知ることができます。

また、より素晴らしいことに、前著出版後に改版されているものについても、しっかりと照会されています。本書の参考文献から、さらにたどっていくことで、膨大な先人の知識、ノウハウが得られることでしょう(このあたりは、TDDBCのクロージングセッションなどで、和田さんがよく言っていますね)。

全部書いてある!

前著を読んでからだいぶ経ち、久しぶりに本書を読んだのですが、それでもTDDに関する内容が全部書いてあることに驚かされました。

既にTDDを実践していたり前著を持っている人でも、本書の第Ⅲ部―中でも「第25章 テスト駆動開発のパターン」、「第26章 レッドバーのパターン」、「第27章 テスティングのパターン」、「第28章 グリーンバーのパターン」、「第29章 xUnitのパターン」、「第32章 TDDを身につける」―は読み返してみると、新たな発見や気付きが得られると思います。

 

本書は、昨今では当たり前になりつつある「テストを書く」というスキルを身に付けるのに、最初の一冊として非常に優れていると思います。ぜひ、書籍を手に取り、できれば和田さんも進めているように「写経」しながら読み進め、開発者として使える「武器」を増やしてほしいと思います。

広告

C# Advent Calendar 2017に参加しました

昨年はパスしたのですが、今年は参加することにしました。以下のエントリを投稿しましたので、ご覧いただければ幸いです。

C#のエラーハンドリング実装あれこれ – Qiita
https://qiita.com/masaru_b_cl/items/104f1df602ac56487806

Niigata.NET 3.0を開催しました #ngtnet

Niigata.NET 3.0 テックトーク+ハンズオン & .NET開発お悩み相談室 – connpass
https://ngtnet.connpass.com/event/69634/

先週土曜の11/18に通算4回目となるNiigata.NETの勉強会を開催してきました。

今年は
「アプリを作ろう! Visual C#入門」という本を書きました
のエントリで書いた通り、本を書いていたため、勉強会開催にかけるリソースが足りず、結局昨年の
Niigata.NET 2.1を開催しました #ngtnet
からちょうど1年ぶりの開催になってしまいました。

今回のテーマは、前回に引き続きテックトーク+ハンズオンです。

プログラミング初級講座 C#編 – 反復 by @AILight

最初は恒例の@AILightさんによるC#のセッションです。「変数」、「分岐」に引き続き、今回は「反復」がテーマでした。

「反復」というと、私は次のようなものをイメージしていました。

  • for使うな
  • 基本はwhile
  • 原則foreach

もちろんこのことも触れられていましたが、今回のセッションで心に残ったのは次の3つでした。

反復は「前処理」、「後処理」とパックで行う

反復というとfor、while、foreachといった「ループ」本体に目が行きがちですが、実際に反復処理を行うときは、前処理の後にループ本体、そしてループが終わったら後処理がほぼ必ずあります。したがって、この前後の処理もループの構文の直前、直後にまとめて記載しておくことが重要とのこと。こうすることで、反復処理全体を簡単に移動させることができますし、なによりループ内部で使っているものが近くにあるので、コードが追いやすく、変なこともしにくいという効果があるそうです。

私自身もほぼ何の気なしにそのように書いてはいましたが、改めてそう言われるとなるほどなとうなりました。

ループ+switchで状態を変更させて処理を行える

パズル感があり、あんまり現在は進められる方法ではありませんが、次のようにループとswitchを組み合わせて、状態遷移で処理を行うというテクニックがあるそうです。

var state = 0;
for (; ;) // 無限ループ(かわいい)
{
  switch (state)
  {
    case 0:
      Console.WriteLine("Header");
      state = 1;
      break;
    case 1:
      if (!recordExists)
      {
        state = 2;
        break;
      }
      Console.WriteLine("record");
      break;
    case 2:
      if (recordExists)
      {
        state = 0;
      }
      else
      {
        state = 3;
        break;
      }
      Console.WriteLine("Footer");
      break;
    case 3:
      Console.WriteLine("Summary");
      state = 4;
      break;
  }
  // state = 4
  break; // ループ終了
}

まず使うこともないでしょうが、いざというときの「腕力」として覚えておこうと思いました。

コレクションの要素とindexを同時に使うときはSelect((element, index) => …)を使う

反復処理を行うとき、コレクションの要素とindexを同時に扱いたいケースがたまにあります。

そんな時私はこれまで、次のようにループの外でindex用変数を宣言してやっていました。

var index = 0;
foreach (var element in collection)
{
    Console.WriteLine($"element: {element}, index: {index}");
 index++;
}

しかし、LINQの要素とindexを取るSelectメソッドを使ってからforeachすることで、ループの外での変数宣言が不要になるとのこと。

foreach (var item in collection.Select((element, index) => new { element, index }))
{
    Console.WriteLine($"element: {item.element}, index: {item.index}");
}

構文自体は知っていましたが、これまでそんなに使っていなかったので、今後は積極的に使っていこうと思います。

アプリ開発ハンズオン by @masaru_b_cl

「アプリを作ろう! Visual C#入門」のじゃんけんアプリをネタに、本を見ないでやってみようというハンズオンをしました。資料はこちら。

当日はラウンド制まではたどり着かず、代替全員があいこならもう一回勝負するというところまで出来たら時間切れになりました。

参加者の皆さんの様子を見ていると、普段仕事で作成するアプリと違い、ゲームは「状態」を強く意識しないといけなかったり、画像をリソースを使って扱ったりしないといけないため、案外手こずっているようでした。

そんななか、何とかは私は著者の面目を守り、スライドの説明後に超速でコーディングして何とか一つの実例コードを書き上げることができました。セッションの最後では、そのコードをもとに開設&コードレビュー会を行いました。

その際説明させてもらったのは、次のような内容です。

  • コントロールのプロパティ直接扱っちゃダメ、絶対!
    • いったん変数に受ける
    • これによりメソッド切り出しが容易になる
    • さらに他の型に追い出すことも容易になる
  • 勝敗判定は次のような感じでやると良い
    • まずグー、チョキ、パーを0,1,2でも列挙型でもよいので一段抽象化する
      • PictureBoxコントロールのImageプロパティで判断してはいけない
    • 判定は次の順
      • プレイヤーと敵の手が一緒ならあいこでreturn
      • 愚直に勝ちパターン3つをor判定
        • プレイヤー:グー && 敵:チョキ
          or プレイヤー:チョキ && 敵:パー
          or プレイヤー:パー && 敵:グー
      • 勝ちでなければ負け
  • グー、チョキ、パーの画像は何らかのテーブルで管理
    • グー、チョキ、パーを指定すると取れる
    • 例では配列を使った
      • 列挙型をキーとするDictionaryだと実行時例外が起きなくてよいのではというアドバイスあり

あと、書籍では実装しなかったのですが、じゃんけんを始めた後、敵の手が次々とランダムに変わりルーレット状になるようにも実装しました。これにはTimerコンポーネントを追加し、次の要領でやりました。

  • スタートボタンが押されたらプレイヤーの手を消してからタイマー開始(Enabled = true)
  • タイマーのTickイベントハンドラーで敵の手をランダムに表示
  • プレイヤーが手を選んだらタイマー停止(Enabled = false)
  • あいこならプレイヤーの手を消してからまたタイマー開始
  • 勝ちか負けなら手を選べなくしてスタートボタンを押されるまで待機

やってみるまでは、非常に簡単なアプリなのでどれだけ盛り上がるかちょっと不安だったのですが、実際にはそれぞれの人でやり方やプログラミングスタイルが異なったり、持っている知識レベルに差があるため、手が止まってしまう箇所がいろいろあって都度アドバイスして直してもらったりと、結構充実した時間となりました。また別テーマでハンズオンをやってみるのもよいなと思えた貴重な時間となりました。(ハッカソンもできたらやりたい)

.NET開発相談室

アプリハンズオンが思いのほか楽しく時間を延ばしてやってもらったので、今回は.NET相談室は取りやめにしました。ただ、次やるときは事前に相談したいことを出してもらってからやるようにしようかなと思いました。

懇親会

次のような濃密な議論ができた時間でした(しれっと

次回に向けて

開催ペースが落ちてしまったので、何とか年2回ペースをキープしたいところです。ひとまず5月くらいを目途に、またやっていこうと思います。

あわせて読みたい

第53回 長岡IT開発者勉強会に参加しました #nds53

第53回勉強会(2017/09/30)「○○プラットフォームについて」 – 長岡 IT開発者 勉強会(NDS)
http://nagaoka.techtalk.jp/no53

に参加してきました。今回のテーマは「〇〇プラットフォームについて」(テーマ外のスピーチでも大丈夫)でした。

テックトーク

WebプラットフォームとしてのWordPress by nomeshi

WordPressはこのblogでwordpress.comを使ってるくらいで実際に現場でどのように使われているか知らなかったのですが、やはり相当のシェアがあるんですねぇ。

セッションではプラグインの使い方や次世代の記事エディターとしてGutenbergが紹介されました。Gutenbergはwordpress.comにも来て欲しい。

デモでは、自作プラグインとして猫画像を表示するものを見せていただきました。詳細はこちらをどうぞ。

WordPressのGutenbergに自作のブロックを追加する(実用性は無し) – Qiita
https://qiita.com/shin1kt/items/8e797074b3fff18f8234

IoTプラットフォーム・工作でスーヴィード(低温調理) by @civic

低温調理器を買うと高いので自作した話です。すでにv1はあったのですが、温度を見て単純にスイッチをON/OFFするだけのため、温度の揺らぎがあるので、それを是正するためにあれこれした話でした。

質疑応答の中で「自作電子工作機器は危険が怖い」というのに対し、「電流のヒューズじゃなくて温度ヒューズ(高温になると電流遮断)を使うといい」というアドバイスがあって、NDS最高かよってなりました。知見はあるところにはあるもんですね。

「音楽制作プラットフォームの話」か「GUI app on ブラウザプラットフォームの話どっちか」改め「音楽理論」by しんぺい a.k.a. 猫型蓄音機

NDSはプログラミングなどのテック菜花氏以外に天気とか地形などの教養を学べるセッションもOKなのが特徴ですが、最近なかったのでブッコんできたとのこと。

とある周波数の音を区別しやすく名前を付けている(例:44HzがA(ラ))とか、音階(スケール)、調性の話から始まり、和音(和声)の種類、仕組みや不安な音、安心な音など、わかりやすく説明してくださいました。

このセッションのパワーワードは「音楽はデザインパターン」でした。プログラマー各位は向いていると思うということなので、各位やっていきましょう!

なお、猫型さんが作曲した曲や歌は、SoundCloudで聞けるそうです。

(おお、wordpress.com、SoundCloudも埋め込めるのか)

Terraformで構築するマルチクラウドプラットフォームインフラストラクチャ by hayajo

越後の誇るインフラスペシャリストであるはやじょさんのセッション。

「Infrastructure as Code」を体現するHashiCorpのツール「Terraform」の紹介でした。名前は聞いたことがあったのですが、どんなものかは知らなかったのですよね。

基本的なコンフィグファイルの書き方に合わせて、様々なサービス、製品(AWSとかAzureとかをはじめとしたクラウドサービスや、ChefやDocker、GitHubなど)に対するプロバイダーを使ってインフラを表現することで、実行計画を見たり、構築したり、マイグレーションしたり、まとめて破棄したりと、確かに便利そうでした。

とはいえ、自動化ツールはなんでもそうですが、再実行すればするほどリターンが大きいものなので、簡単なものはWebコンソールからポチポチの方が速かったりすることもあるそう。この辺はバランスですね。

C#で始める、Windows プラットフォーム 開発効率向上化プロジェクト by AILight

これまで仕事で取り組んだ「共通化」の話を惜しげもなくしてくださいました。

共通化というとよくあるのはライブラリレベルを思い浮かべますが、そうではなく「販売管理システム」のデータモデルから共通化し、10年かけて練り上げ、負債ではなく資産として成長させてきたという話でした。

このあたり、正直いわゆる「直ユーザー」相手に仕事をしていないと、案件ごとに使う技術がそろえられないのでまず無理なのですが、それでも非常に「正しい」と思える話でした。

あと、驚いたのは、サードパーティのコンポーネントを排するため、帳票コンポーネントも自作しているということ。入力コントロールやグリッドコントロールくらいなら私も作りましたが、さすがに帳票までやろうとは思えませんでした。完全に頭おかしい(ほめ言葉)。

イベントログとの付き合い方 by gonchan93

最後はWindowsのイベントログの紹介。

WindowsのイベントログはテキストベースではなくバイナリでがっつりOSの仕組み使って書き出すので、少し扱いにくい部分もありますが、ログファイルの置き場所とか考えなくてよいのは強いです。テキストベースでエクスポートしようと思えば、JScript等を使ったWSHやPowerShell、C#などのプログラムで結構お手軽にできますし。

ただ、標準のビューアーだけはもうちょっと軽くならんかなぁ……

LT

私含めいろいろと。私はというと、

https://takanosho.wordpress.com/2017/08/09/publishing-making-app-for-vcsharp/

で紹介したように本を書いたので、その紹介を行いました。レビュアーを募ったらほとんど手が上がらなくて泣きそうでしたが、最終的に2名の方に引き取っていただけました。改めて御礼申し上げます。上がってくるレビューを心待ちにしております。

まとめ

毎度のことながら、NDSはこの「ごった煮感」がたまりません。最近通常セッションのスピーカーをやってないので、またネタ仕込んで登壇したいところです。

そして、次は12/2(土)に開催予定とのこと。その日の懇親会は毎年恒例NDB(新潟・長岡 IT開発者 忘年会)も開催ということで、しっかりYAuth通して参加したいと思います。

みなさんも楽しい勉強会ですので、ぜひおいでください。

「アプリを作ろう! Visual C#入門」という本を書きました

アプリを作ろう!  Visual C#入門 Visual C# 2017対応
https://www.amazon.co.jp/dp/4822253554/

サポートページ
http://ec.nikkeibp.co.jp/item/books/P53550.html

本書は無償で入手できるVisual Studio Community 2017でVisual C# 2017を使用して、プログラミングの楽しさが体験できる入門書です。
開発経験がなくても、全9章を順番に学習することで、プログラミングや開発環境の基礎知識、画面のデザイン、コードの書き方、エラーが起きたときの対処方法などを理解できます。
章ごとに短いトピックで区切られているので、自分のペースで学べます。PCスクールなどの教材としても適しています。

という本を執筆し、この度出版する運びとなりました。

企画自体は1年半近く前からありまして、最初はVS2015向けに書く予定でした。しかし、VS2017のBetaが出てき手タイミング変更を余儀なくされ、年末から再スタートしました。

本書の特徴は何といってもまさに「入門」のための書籍であるということです。

例えば、敢えてC#の言語機能を詳しく説明することはせず、サンプルアプリで使う機能に絞って都度説明するようにしています。初学者のには一度に覚えることはなるべく少なくしてあげないと、混乱してしまうためです。

また、本書の構成で一番気を使ったのが、「どの章でやめても、動かして遊べる」ことでした。初心者向けの教育で何より大事なのは、小さなステップで成功体験を積ませることだと私は思っています。したがって、「今やっている章と次の章をやらないと、そもそもプログラムが動かない」というのは、絶対に避けなければいけません。

そういったことを念頭に置き練った構成が、「各章ごとにアプリがパワーアップしていく」というものです。これにより、初心者でも飽きずに、少しずつ動かして動作を確認しながら進めることもできますし、アプリは少しずつ作って成長させていくものだということも教えられるのではないかと考えています。

すでに述べた通り、本書はC#の機能を網羅することを目的とはしていません。言い換えれば、本書はあくまで「1冊目」としての位置付けだということです。プログラミングは膨大な知識とスキルが必要であり、これは1冊の本を読んだだけでは身につくことはまずないでしょう。むしろ1冊で収めようとすることで情報過多になり、かえってわかりにくくなることだってあると思います。そこで、本書でなんとなく「プログラミングというもの」やIDEの使い方を身に着け、次に網羅系のテキストでより深堀して学ぶというのがお勧めです。

身近にWindowsを使っていてプログラミングを始めたいという人がいるようであれば、ぜひ本書を手に取ってみてください。

第51回&第52回 長岡IT開発者勉強会に参加しました #nds51 #nds52

の2つの勉強会に参加してきたので、片方はだいぶたっちゃいましたが、「レポートを書くまでが勉強会」ということで、思い出して書きます。

第51回

「データに関わる何か」というテーマで、プログラミングではない話も含め色々聞けました。

当日の様子は次のtegetterからどうぞ。

第51回勉強会 テーマ「データに関わるなにか」(2017/03/25) #nds51 まとめ
https://togetter.com/li/1094088

Vue.jsから始めるDOMにデータを持たせないアプリケーション開発への第1歩 by @nemuzuka

最初は片桐さんのVue.jsの話。Webフロントエンド戦国時代の現在、React、Angulerなどと並んで人気のあるライブラリですね。

諸事情により途中からしか観れなかったのですが、「コンポーネント指向」なところまでちゃんと紹介されていてよかったです。データバインディングの書き方も、個人的にはKnockoutよりもシンプルで好みです。

ReactとかAnglerとかみたいに結構大きめに投入するのは最初の心理的ハードルが大きいですが、Vue.jsはデータバインディングだけでも、jQueryだけで頑張るより楽になるケースも多いと思うので、最初に取り組むにはよいと思います。

RDBMS のトランザクション分離レベルやレプリケーションとか。あと苦労話。 by bell-miya

もうタイトルそのまんまです。

元々RDBMSに慣れていて、その感覚で新たなRDBMSに取り組んで失敗した話とかそんなのが聞けて、活きた話が聞けました。

グラフ構造データを扱うはなし:グラフデータベース、RDF、可視化など by Yu Watanabe

http://yuw27b.github.io/slide/graph-data

「大学の非常勤エンジニア + フリーランス」という珍しい肩書のYu Watanabeさんの、グラフデータベース「Neo4j」をメインとして話で、個人的に今回一番面白かった。

SIerに勤務している関係もあり、プロジェクト運営におけるタスクのクリティカル・パスの分析や、PERT図などの扱いに使えそうだなという感想を持ちました。ぜひ今後取り組んでいきたいところ。グラフ構造を扱う専用ミドルウェアがあるなら、自分でコード書くのがんばるよりぜってい良いですからね。

入門系の本を一冊も読まずにデータサイエンスの世界に足を突っ込んでみる by sakapun

最近(?)流行りのデータ分析の概要と、Python等で使えるツールの紹介でした。PandasJupyter Notebookなど、

#rebuildfm で聞いたところだ!

ってのがたくさんで、大変面白く聞けました。

PostgreSQLのデータ型 by @civic

NDS代表civicさんの発表です。

PostgreSQLは結構変わったデータ型がいっぱいある印象でしたが、他のRDBMSでも取り入れられてきているそうで、あんまり差がなかったとかw

範囲データ型とかSIerな文脈では便利そうな感じを受けましたが、データドライバー(プロバイダー)側の対応が整備されているわけではないので、取り扱いには注意が必要そうです。

Let’ LINQing! by @masaru_b_cl

私の発表です。LINQPadを使ったデモも交えながら、LINQを使った簡単なデータ処理を紹介しました。

スライドにも書きましたが、データ処理では@sakapunさんの発表で紹介されたpython系のツールが主流です。しかし、対象データの規模や組織のスキルセットなどを考えれば、C#およびLINQを用いたデータ処理は、そこそこ有望な選択肢の一つだと思います。

当日使ったLINQPadのファイルは以下のGitHubリポジトリに置いてありますので、ぜひ試してみてください。

https://github.com/masaru-b-cl/nds51-linqpad-files

LTs

既に3ヶ月経ってあんまり記憶が無くて感想が書けません。申し訳ないです……

懇親会

ビアバッシュ形式で開催されました。ずっと@nemuzukaさん、@AILightさんとしゃべってた気がする……

 

第52回

「初心者向け」というテーマで、様々な入門?的なセッションが聞けました。オーディエンスが初心者じゃないのではというツッコミもありましたが、そんなことないよ!

当日の様子は次のtegetterからどうぞ。

第52回勉強会 テーマ「初心者むけ」(2017/06/17) #nds52 まとめ
https://togetter.com/li/1120966

はじめてのC#プログラミング by @AILight

最初はMS MVPの石野さんによる、C#プログラミングの紹介でした。諸事情により途中から観たのですが、マシン語やアセンブリからC#に至る道も紹介していて、おっさんホイホイでした。

後半のC#の話に入ってからは、順次、分岐、反復について、石野さん自身のスタイルも紹介しながら、バグの入り込まないプログラムの書き方につながり、良い話でした。

なんてかんたんなJavaEE by @civic

NDS代表であるcivicさんによる、最近のJavaEEの紹介でした。

がセッション聞く前の印象でしたが、最近は「Payara」というJavaEEコンテナサーバーなどで実装されている、Micro Profileというものがあり、ASP.NET MVCバリに軽量にWeb APIが書けるのはちょっと新鮮でした。

そして、JVMで動くということはJVM言語ならOKなので、最近話題のKotlinや関数型パラダイムを取り込んだScala、スクリプト言語のGroovyなど、好みの言語で動かすこともできるので、結構さっくりと書けてしまいそうです。

文字コードとプログラミング by @gonchan93

諸事情によりスライド途中で終わっちゃったんですが、文字コードについての恨みつらみが詰まったセッションでした。

がすべてで、Unicode使わないとつらい話とかJava等の言語での文字の扱いについてとか、「初心者向け?」という内容ではありました。

結果、大多数の認識が

になるという異例の事態に。

Netcatを使おう by @hayajo

チョー便利なネットワークコマンドツールNetcatの紹介です。

Netcatとは「ncコマンド」のことで、多くの実装がありプラットフォームによって採用する実装がバラバラらしく、今回はその中のNcatを紹介してくださいました。

ncatは初めて知ったのですが、ネットワーク系ツールのクライアントにもサーバーにもなり、さらに自身をプロクシとして動かすこともできて「組み合わせ次第で可能性は無限大!」でした。その分使いこなすにはひらめきが必要そうですが、小さな部品を組み合わせるというUnix-wayを体現していて、好感が持てました。ncatはWindows版もあるそうで、覚えておくと役立つ機会もありそうです。

正直「初心者向け…?」レベルではありましたが、良いセッションでした。

なお、今回のパワーワードがこちら

怖くないし役に立つ設計原則の話 by @neko_gata_s

スライド公開はないそうですが、DRY原則から始まり、プログラミングの基本的な設計原則はそれぞれ関わり合っているので、「一つだけを考慮するのではなく全体のつながりを見てコードを分けていこうな!」というメッセージが最高でした。

説明にはRubyっぽいコードを用いていたのですが、間違ったDRYコードのクソな点を説明し、本来目指すべきだったDRYコードを提示しての説明は、プログラミング言語を覚えて次に行こうとする人にはちょうど良い感じだったと思います。

ご本人の思いなどは、こちらのエントリをどうぞ。

第52回NDS(長岡開発者勉強会)で「怖くないし役に立つ設計原則の話」を発表してきました – 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
http://nekogata.hatenablog.com/entry/2017/06/18/211648

はじめてのソフトウェアテスト by @kasacchiful

笠原さんによるまさに「初心者向け」のテストの話です。ソフトウェアをテストするとはどういうことなのか、どういう切り口でテストを考えていけばよいのか、どうやってテストケースと考えればよいのか、といった基本的な部分を押さえていて、非常に良いセッションでした。

そして、「『バグ』は曖昧な言葉」、「テスト観点はテストの目的に応じた品質特性を見ている」、「テストが品質を上げる割合は少ない」、「テストは最後の砦」、「テストがうまくなると設計がうまくなる」など、パワーワード満載でした。資料公開が待ち遠しいです。

今日から使えるCSSパターン by @yuw27b

第51回に引き続きWatanabeさんの登場です。

個人的に身に着けたCSSの知見について紹介していただきました。フレームワークやOOCSSから入り、BEM(Block Element Modifiler)→ECSS(Enduaring CSS)の考えを取り入れた形に今は落ち着いているとのこと。

私自身はあんまりがっつりとCSSを書くことはないのですが、いざ書く必要に駆られたときに、あんまりうまいこと設計できていないと感じていたので、BEMなどのコンポーネント化されたCSS設計手法は、非常に参考になり、ECSSについても学んでみようかなと思いました。

なお、ご本人の思いなどはこちらのエントリをどうぞ。

NDS第52回勉強会に行ってきたよ – yuw27b’s blog
http://yuw27b.hatenablog.com/entry/2017/06/19/225206

はじめての修羅場 by @hiro55bs

「明日修羅場にPMとして放り込まれたら?」という胃が痛いセッションw

結局のところ銀の弾丸はないので、現状把握→上と握る→ステークホルダーと調整→タスクのトリアージ→無駄の削減を進めていくしかない感じで、ああ胃が痛い(2回目)

早く修羅場が終わるといいですね……

LTs

LTは今回私入れて3本でした。

フリーランスの始め方(初心者向け) by @nemuzuka

安心と信頼の片桐さんによるフリーランスの始め方。

「1. フリーランスになります。以上。」とのこと。

会社員からフリーランスになって、一番気を付けないといけないのは税金と社会保険だなぁと思いました。まる。

「新人研修の作り方」のその後 by @masaru_b_cl

私のLTは第41回での無茶ぶりLTで話した「新人研修の作り方」のその後の問題、改善点などをお話ししました。スライドは公開しませんが、また機会を改めてちゃんとまとめて詳しく説明できる機会を持てたらとは思います。

なお、質問でいただいた当社新人研修のテキストは、次の4本を公開しています。ライセンスはCC-BY-SAですので、ご自由にお使いください。

インターネットの契約から開通まで by @kam1nchu

なごやちほーからこの4月に新潟にいらっしゃったということで、速いインターネットを用意するお話でした。

IPv6のため「だけ」にひかり電話を契約して使わないとか、UNIからケーブル引っこ抜いてYAMAHAのルーターにさすとか、やばい人が新潟に増えました!(褒めてる)

懇親会

今回もビアバッシュ形式で楽しみました。前回の反省も踏まえ、今回は一応全テーブルに顔を出すことに成功しました。あと、ねんがんのはやじょさんとがっつりお話しするのも、たぶん実績解除できたかと思います。

まとめ

NDSはテーマを絞らない分、ごった煮感、カオス度が非常に高くてとても面白いコミュニティです。新潟近郊の方だけにとどまらず、首都圏の方も新幹線で2時間しないで来れますので、ぜひおいでください(ついでに新潟のおいしいお酒と料理も楽しめますよ!)。

それはそれとして、私としてもまたNiigata.NET開催に向けて「狂気」と高めていかないとなと、決意を新たにしました。

次回も都合がつけばぜひ参加したいと思います!

Niigata.NET 2.1を開催しました #ngtnet

Niigata.NET 2.1 テックトーク+ハンズオン & .NET開発お悩み相談室 – connpass
https://ngtnet.connpass.com/event/41607/

先週11/19(土)に今年2回目となるNiigata.NET勉強会を開催しました。今回は従来のテックトークに加え、参加者の皆さんにも手を動かしてもらおうと、ハンズオン形式のセッションも取り入れてみました。

(当日の様子はこちら

 

プログラミング初級講座 C#編 – 分岐 by @AILight

最初のセッションは、新潟が誇るMS MVPの石野さんによる、シリーズもの第3弾です。if、switchといった「分岐」を扱う言語機能についてフォーカスし、初歩的な内容から紹介していただきました。

その中で印象的だったのは「分岐がないことが分岐の良い条件である」といったような雰囲気の言葉でした。

ともすると、分岐というものはいわゆるスパゲティコードになってしまいがちなものです。特に初心者、初級者のうちは、いわゆる設計書に書かれたロジックをそのまま表現しようとして、様々な条件が入り組み、深くなったif分を書いてしまうものです。

こういったif文、switch文を「いかに減らすか」が、分岐を扱うキモだと石野さんは主張されました。

その為に、if文をどうやって減らすかということを、コード例を用いて説明しました。その方法は主に以下の通り。

  1. 配列等を使ったジャンプ
  2. 「条件」でなく「データ」に着目

配列等を使ったジャンプ

引数が0->5のような値だとして、それに対応する値を返すような場合、それは引数をインデックスとみなして配列を用いて目的の値を返すようにすることで、if文をなくすことができます。

変更前
int SomeMethod(int value)
{
  if (value == 0)
  {
    return 5;
  }
  else if(value == 1)
  {
    return 10;
  }
  else if (value == 2)
  {
    ...
  }
  ...
}
変更後
if SomeMethod(int value)
{
  return new [] { 5, 10, ... }[value];
}

何かしらの値のテーブルを使って対応する値を返すようなケースでは、案外使えるケースはありそうです。

「条件」でなく「データ」に着目

小規模なアプリでメニューを作る際、ユーザーの情報を条件にif文を連ねて必要なメニューを表示するようにすると、条件の追加、変更に弱くなってしまいます。それを解決するため、「ユーザー情報」側にどのメニューを表示するかの判断を委譲し、メニューを構築する側ではそれを利用するだけにします。

変更前
if (user.IsHoge)
{
  // A機能メニューに追加
}
else if (user.IsFuga)
{
  if (user.IsPiyo)
  {
    // B機能メニューに追加
  }
  else
  {
    // C機能メニューに追加
  }
}
変更後
if (user.UseA)
{
  // A機能メニューに追加
}
else if (user.UseB)
{
  // B機能メニューに追加
}
else if (user.UseC)
{
  // C機能メニューに追加
}

このように「データ」を主体に構築することで、条件の追加、変更に強くなります。

 

先日リリースされたC# 7では「型スイッチ」機能などでさらに分岐のパターンが増えます。こういったものを使うにも、基本的なif、switchは押えておいた方がよいでしょう。

 

ASP.NET MVC開発体験 by @masaru_b_cl

私のセッションです。asp.net/mvcからアクセスできるASP.NET 5のチュートリアルを、会場の皆さんとやりながら簡単にASP.NET MVCの説明を行いました。

一緒に進めていくので、それぞれ進み具合が違い、ある程度余裕を持って進めていたので、MVCのCとVまでしかできませんでした。それでも、Cでリクエストを受け取って処理して返す、VはRazorで書く、Vの編集と確認はリビルド不要、くらいは説明できたので良しとしましょう。

実際、今回のセッションの裏テーマは「公式チュートリアルやろうぜ」でした。

大抵のメジャーなプラットフォーム、フレームワークは公式がチュートリアル用意してあることが多いです。もちろん英語なわけですが、「うわっ、英語怖い!」を乗り越えて読んでみると、実際は中学英語範囲の構文で読めますし、重要なのはコードなので万国共通のため、あんまり問題ありません。

それを避けてわざわざどこの馬の骨ともわからない人が書いた日本語blogエントリを読んだり、公式以外のチュートリアルを見ても、情報が古かったり、環境構築が大変だったりして、すんなりいかないことが、個人的には多いと感じています。

その点、公式チュートリアルは必要十分な情報をコンパクトにまとめてあることが多いです。一例として、某レールに乗るフレームワークのチュートリアルは、環境の違いかうまくできなかったんですよねぇ。でも、公式のやつは引っかかることもなくできたという経験があります。

ぜひ、未知のプラットフォーム、フレームワーク、ライブラリは、まずは公式チュートリアルから入ってみることをお勧めします。

あと、今回@circled9さんが前日にリリースされたばかりのVisual Studio for Macでぶっこんできて、「強い」と思いました。(ありがとう!)

 

.NET開発相談室

Niigata.NETの恒例コーナーにしていこうと目論んでおりますw

前回主催側がしゃべりすぎたため、今回は参加者の皆さんに多くしゃべってもらおうと思ったのですが、なかなかうまくネタを引き出せないものですね。それでも、なんとか四苦八苦してネタを絞り出し、あーだこーだ言える機会が持てたのは良かったです。

ただ、イベント終了後に「string型の変数の初期化をnullでやるのと空も時でやるの、どっちがいいんですかね?」みたいなことを聞かれ、「それをさっきの相談室で言ってもらえたら!」って思ったので、次回は「こんなのでいいんですよ」ってのを、もっと言ってかないとなぁと思った次第です。

 

そんな感じで、第3回の勉強会を終えました。今後はなんとか最低でも年2回ペースで開けるよう、いろいろと動いていきたいと思います。あと、主催側じゃないスピーカーの確保もぜひ。

 

なお、Niigata.NETでは「中の人」も募集しております!別にスピーカーをやれというわけではなく、イベント運営に必要な会場設営、受付、懇親会の手配など、色んな雑事の一部をお手伝いしていただけたらと思います。やってもいいよという方は、この記事へのコメント、Twitterでのメンション、ハッシュタグ#ngtnetを付けたつぶやきなど、何らかの手段でお知らせください。