Goでコマンドラインオプションを受け取る

概要

Golangコマンドラインオプションを受け取る方法。

go-sample というプログラムがあった場合に、 go-sample -hoge="bbb" と実行して、 bbb を受け取る。

手順

flagパッケージをimportします。

import (
  "flag"
)

flag変数(コマンドラインオプションを格納する)を宣言します。

// flag.String({flag名}, {デフォルト値}, {ヘルプ時のメッセージ})
var optHoge = flag.String("hoge", "aaa", "flag利用のサンプルです")

flagは宣言した後Parseする必要があります。

flag.Parse()

使用する時は *{変数名} です。

*hoge

サンプル

package main

import (
    "fmt" 
    "flag"
)

func main() {
    var optHoge = flag.String("hoge", "aaa", "flag利用のサンプルです")
    flag.Parse()
    fmt.Println(*optHoge)
}
  • go-sample と実行した場合、 aaa を表示
  • go-sample -hoge="bbb" と実行した場合、 bbb を表示
  • go-sample -help と実行した場合、 flag利用のサンプルです を表示

社内でモブプログラミング交流会を開催しました #MobProgramming

モブプロをもっとみんなで楽しみたい!の思いから社内でモブプロでの交流会開催しました。

業務後に希望者で集まって、軽くお酒とお菓子も用意して、ゆるーく楽しめる会を目指しました。

開催にあたって、以前参加させていただいた Mob Programming Val を参考にさせて頂きました!

当日の流れ

おおまかな流れとしては下記のような感じでした。

※全体でおよそ2時間くらい

  • 業務終了後、買い出しにいく
  • モブプロするプログラミング言語を決める
  • モブプロするテーマを決める
  • Hello Worldしてみる
  • テストできるようにする
  • モブプロする
  • ふりかえり
  • 解散

言語えらび

今回は開発環境を用意するのに手間のかからない repl.it を前提にしていたので、対応しているものの中からみんなで相談して決めました。

repl.it - online REPL, Compiler & IDE

せっかくならやったことない言語にしよう!ということで今回は Rust になりました。

僕は名前しか聞いたことありませんでした笑

テーマえらび

テーマはTDDのお題なんかだとやりやすい、という話を聞いていたので、下記サイトの中から皆で相談して決めました。

d.hatena.ne.jp

テーマが分かりやすく、進めやすそうだね、ということで今回は 野球の打率計算 になりました。

モブプロ!

いよいよ実際にモブプロ開始です。

マシンは1台で、Mobsterを使って1人7分で回しました。

github.com

はじめての言語なのでみんな当然苦戦しますが、ワイワイガヤガヤで作りあげていくのは本当に楽しいです。

限られた時間なので妥協したところもたくさんありますが、最終的に

  • 打率を計算する処理
  • 打率を表示する処理

の2つを実装できました(もちろんテストもあります!)。

最後に受け入れテストとして、

  • イチローの成績をググってパラメータとして渡した結果、同じ打率を表示することに成功!

拍手で終えたのでした。

f:id:su-kun1899:20170811004115p:plain

想像以上に盛況!

ふりかえり

最後にみんなで軽くふりかえりをしました。

慣れ親しんでいる、ということもあるのでKPTでやりました。

  • K: よかったこと
  • P: もやもやしたとこ
  • T: 次回やるとしたらこうしたい

Rustのここがいいかも、いやここ微妙じゃない?みたいなエンジニアっぽい意見もありつつ、

  • みんなでやると心強い
  • ひとりでやるよりハードル低い
  • 他の人のコーディングを見ると気付き(学び)がある

のように、モブプロの良さを体感してくれた意見が出たのはとてもうれしかったです。

個人的にはSlackのというチャンネルを用意してあったので、そこで実況できたのは結構良かったかなと思っています。

調べたURLとかコードの例とかを貼っつけられたりするのに便利でした。

ただ「ちょっと慌ただしい」みたいな意見もあったので、立ち止まって一度足並みを揃える時間や、掘り下げる時間を設けても良かったのかな、というのが反省点です。

f:id:su-kun1899:20170811003835p:plain

Pが少ない!

Try!!

みんなからポジティブな反応が出ていて、とりあえずもう一回同じような場を設けようという流れになっています。

ふりかえりでも

  • 慣れた言語だとどうなるかやってみたい
  • モデリングなど設計が必要な大きさの課題だとどうか
  • 開発環境をもっと整えてやりたい

などの意見が出て、もう皆モブプロに興味津々 で完全に僕の思う壺 です。

まとめ

ちょっと気軽に体験できる場として、モブプロの場を設けるのはとても良いと思うのでおすすめです。

単純に普段直接的な接点がない人が集まって交流する場としてもよいのではないでしょうか。

モブプロ楽しいですよモブプロ!

GO言語でHello Worldしてみた #golang

Macで Hello golang してみた。

インストール

brew install go

bash_profileの編集

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

追記して source する。

ワークスペースの作成

mkdir $HOME/go
mkdir -p $GOPATH/src/github.com/su-kun1899

プロジェクトの作成

mkdir -p $GOPATH/src/github.com/hello-golang

実装

$GOPATH/src/github.com/su-kun1899/hello-golanghello.go という名前でファイルを作成する。

package main

import "fmt"

func main() {
  fmt.Printf("Hello, world.\n")
}

実行

$ cd $GOPATH/src/github.com/su-kun1899/hello-golang
$ go install
$ hello-golang

Hello, world. が表示されれば成功!

GitHub

github.com

Visual Studio Codeの設定をいじってみた

Qiitaの記事を参考に修正してみた。

qiita.com

一部上記の記事では古くなっている設定項目もあったが、設定画面で丁寧に説明が書いてあるので特に困らなかった。

最終的に出来上がったのがこちら。

{
    // フォントファミリー(お好みで)
    "editor.fontFamily": "'Source Han Code JP', Menlo, Monaco, 'Courier New', monospace",
    // フォントサイズ(お好みで)
    "editor.fontSize": 12,
    // (お好みで)スペース2個インデントの言語を触ることが多いので
    "editor.tabSize": 2,
    // ウインドウ幅で折り返す
    "editor.wordWrap": "on",
    // 自動フォーマットする
    "editor.formatOnType": true,
    // ファイルを自動保存
    "files.autoSave": "afterDelay",
    "workbench.colorTheme": "Quiet Light",
    // 制御文字を表示する
    "editor.renderControlCharacters": true,
    // ホワイトスペースを表示する。ただし単語間の単一スペースは表示しない
    "editor.renderWhitespace": "boundary",
    // インデントガイド(インデントに沿って縦線を表示)
    "editor.renderIndentGuides": true,
    // 現在行をガターを含めてハイライトするので視認性が上がる
    "editor.renderLineHighlight": "all",
    // 差分を横に並べて表示ではなく行内に表示する
    "diffEditor.renderSideBySide": false,
    // 再起動時に開いていたウインドウをすべて復元する
    "window.restoreWindows": "folders",
    // タイトルバーにファイルのフルパスを表示する
    "window.title": "${activeEditorLong}",
    // ファイルの末尾は改行で終わらせる
    "files.insertFinalNewline": true,
    // 拡張機能を自動更新
    "extensions.autoUpdate": true
}

gistに置いておく。

VsCode.md · GitHub

RabbitMQをMacにインストールしてみた

Homebrewでインストー

brew install rabbitmq

起動

/usr/local/sbin/rabbitmq-server

detachedを付けるとバックグラウンド実行らしいが、何か警告が出る。

$ /usr/local/sbin/rabbitmq-server -detached
Warning: PID file not written; -detached was passed.

起動はしているようだ。

$ /usr/local/sbin/rabbitmqctl status

停止

$ /usr/local/sbin/rabbitmqctl stop

管理画面にアクセス

http://localhost:15672/

  • user:guest
  • password:guest

まとめ

ここで力尽きた。

以前activeMQを使っていた時の「めんどくせぇなぁ」という記憶が強いために、メッセージキューイングのツールで便利になる感覚がイメージできない。

それゆえモチベーションも上がらない。。

参考

qiita.com

ls がどうにもこうにも帰ってこないとき

サーバで、このディレクトリ何だろ?と思って ls を打ってみたけど、待てど暮せど帰ってこない。

どうやら大量にファイルがあるみたい。

それでも見たい、そんなとき。

-U オプションを使う

lsはソートをしてろい、ソートに時間がかかっているらしい。

-U を使うとソートをしないので早くなるみたい。

-f でもいいみたい。)

find する

ソートを切ったくらいじゃ変わらない時。

find -type f すると中身をちら見するくらいはできます。(順々に出力されるので)

参考

qiita.com

spring-security-testを使おう

Spring Securityを使ってるSpring BootのWebアプリでテストを書く時に、認証自体をテストしたいのでなければ spring-security-test で認証情報を簡単にMockできる。

pom.xml

spring-security-testdependency に追加する

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>

@WithMockUser

@WithMockUser をテストメソッドに付与することで、認証情報をモックできる。

ユーザ名やROLEも簡単にMockできそうである。

@RunWith(SpringRunner.class)
@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
        classes = SpringbootWebSampleApplication.class)
@AutoConfigureMockMvc
public class CustomerControllerIntegrationTest {
    @Autowired
    private MockMvc mvc;

    @Test
    @WithMockUser
    public void whenGetCustomers_thenStatus200() throws Exception {
        mvc.perform(get("/customers"))
                .andExpect(status().isOk());
    }
}

まとめ

なんかすごい見当違いの方向でがんばってたんだけど、Spring Security使ってるなら、spring-security-test に便利なものいろいろあるからそれ使えばいいってだけの話だった気がする。

参考

ishiis.net