つばろぐ

福岡のエンジニアによる技術的な備忘録です。

博多Tech塾でレガシーからモダンにシフトする.NET開発手法について登壇しました

2017年8月19日に開催された「博多Tech塾」で登壇してきました。
きっかけは九州で活躍するフルスタックエンジニアのT-Katouさんにお声がけ頂いて、登壇することとなりました。

hakata-tech-juku.connpass.com

元々企画段階で、ASP.NETに関するセッションをしますよーと言ってましたがネタ作りに苦戦したので、もっと広げて.NET開発手法をどのようにしてレガシーからモダンにシフトするか、というテーマでセッションを行いました。

ただ、参加者への事前アンケートを教えてもらったら、みんなの興味はAzureだったみたいですw

スライド

登壇スライドはこちらになります。

テーマ

前職からの経験上、福岡のような地方都市の.NET開発現場はいまだにレガシーな環境が多く存在します。
そういった方がこれから.NET開発を続けていく中で、どう新しい手法や分野にシフトできるかなーと思って作りました。

ざっくり内容

  1. 開発環境編
  2. アプリケーション編
  3. フレームワーク
  4. コーディング編

これら4つの観点をそれぞれ取り上げて、現時点での新しい手法について紹介しました。

サンプル

セッションでは、ASP.NET CoreとDockerのデモや、LINQのデモを行いました。
LINQのデモで使ったコードはサンプルとして公開していますので、気になる方はどうぞ。

github.com

感想

今回の勉強会はMicrosoftの様々なテクノロジーを取り上げました。
初めましての方がほとんどで新鮮な気持ちになりましたが、全体的にセミナーっぽい雰囲気になってしまい、あまり交流することができなかったのが心残りです。

今日の参加者の中から、Fukuoka.NETにも興味をもってくれる方がいればいいなーという気持ちです。

キューをトリガーにしてSendGridでメールを送るAzure Functionsを作ってみた

SendGridを使って定形メールを送る場合、もうこの方法でいいんじゃないかと思ってきました。
メールサーバは自前で構築すべきでないし、現状はSendGridを使うことがベターだと思います。

とはいえSDKを使ってメール送信機能を自分で作るのすら面倒に感じていたので、Azure FunctionsのSendGridバインドを試してみました。

結論

いきなりコードを書くな。FunctionsポータルのGUIで作った関数をコード化しろ。

いきなりコードを書くな

このドキュメントにあるサンプルに従って、SendGridのメールを送る関数を作ってみたがうまく動かず。

docs.microsoft.com

Visual Studio 2015 + Tools for Azure Functionsで作ってたが、どうにもデバッグが面倒くさい。

Functionsポータルで関数を作る

このドキュメントに従ってポチポチとポータルで関数を作ります。すごく簡単。

docs.microsoft.com

いきなりQueueをトリガー(入力)にせず、ManualTriggerで「SendGridバインドでメールが送信できる」ことを確認すると分かりやすいです。
その後、トリガーをQueueに変更しましょう。

ストレージアカウントの接続情報やSendGridのAPIキーを直接コード上に定義するとコミット上から丸見えになってしまうので、App Serviceのアプリケーション設定に定義して、function.jsonから参照することで安全に管理できます。

f:id:tech-tsubaki:20170815003121j:plain

f:id:tech-tsubaki:20170815003419j:plain

SendGridのバインド設定はAPIキーのほか、以下の情報を設定にもつことができます。

  • APIキー
  • 宛先アドレス(to)
  • 差出人アドレス(from)
  • 件名(subject)
  • 本文(body)

コード化する

「Queueをトリガーにする」「SendGridでメールを送信する」という動作が確認できたら、それをコード化しましょう。
といってもFunctionsポータルで参照できる function.jsonrun.csx をコピペすれば良いです。
試しに作ってみたので気になる方は見てみてください。

github.com

このサンプルではQueueに送信先メールアドレスを入力することで、自動的にそのメールアドレスに対してSendGridからメールを送信する関数になってます。

Dockerを使ってJenkinsを起動する方法

JenkinsはDockerhubの公式イメージとして提供されています。

https://hub.docker.com/r/_/jenkins/

とりあえずJenkinsを起動したい場合のコマンド

docker run -p 8080:8080 -p 50000:50000 jenkins

ポートの役割

8080 : Jenkinsのポータルにアクセスするためのポート
50000 : Jenkinsのスレーブにアクセスするためのポート

注意

このコマンドで起動したJenkinsコンテナを破棄すると、Jenkinsの各種設定も破棄されてしまいます。

Jenkinsの設定を残しておきたい場合のコマンド

docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins

-vオプションで設定の保存先のディレクトリを指定しましょう。
すると指定したディレクトリに設定ファイルが保存されます。

$ ls -al
total 94
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:22 .
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:05 ..
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:21 .groovy
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 .java
-rw-r--r-- 1 tsubaki 197609 1592 8月  12 05:10 config.xml
-rw-r--r-- 1 tsubaki 197609  102 8月  12 05:10 copy_reference_file.log
-rw-r--r-- 1 tsubaki 197609  159 8月  12 05:10 hudson.model.UpdateCenter.xml
-rw-r--r-- 1 tsubaki 197609  370 8月  12 05:20 hudson.plugins.git.GitTool.xml
-rw-r--r-- 1 tsubaki 197609 1712 8月  12 05:10 identity.key.enc
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 init.groovy.d
-rw-r--r-- 1 tsubaki 197609   94 8月  12 05:10 jenkins.CLI.xml
-rw-r--r-- 1 tsubaki 197609    6 8月  12 05:10 jenkins.install.UpgradeWizard.state
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 jobs
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 logs
-rw-r--r-- 1 tsubaki 197609  907 8月  12 05:10 nodeMonitors.xml
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 nodes
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:22 plugins
-rw-r--r-- 1 tsubaki 197609   64 8月  12 05:10 secret.key
-rw-r--r-- 1 tsubaki 197609    0 8月  12 05:10 secret.key.not-so-secret
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 secrets
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:19 updates
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 userContent
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 users
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:10 war
drwxr-xr-x 1 tsubaki 197609    0 8月  12 05:21 workflow-libs

設定を保存しておけば、Jenkinsコンテナを破棄して作り直しても、設定を引き継いでくれます。

Jenkinsのセットアップ

http://JenkinsコンテナのIPアドレス:8080 でJenkinsのポータルにアクセスできます。
今回指定したバージョンは、記事執筆時点のlatest(2.60.2)です。
初期画面が私の知ってるJenkinsではなかった…。

f:id:tech-tsubaki:20170812060652j:plain

この画面ではJenkinsの初期管理パスワードを入力するようです。
画面に表示されたファイルにパスワードが記載されているので、コピーして入力しましょう。

また先のコマンドを使って起動した場合、コンソールにパスワードが表示されるので、それをコピーしても構いません。

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

(ここに初期管理パスワードが表示される)

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

また、インストール時にプラグインが選べるようになりました。

f:id:tech-tsubaki:20170812061106j:plain

f:id:tech-tsubaki:20170812062022j:plain

管理者を作成してセットアップ完了です。

f:id:tech-tsubaki:20170812062259j:plain