urfave/cliを使ってみた

Building a Network Command Line Interface in Go | TutorialEdge.net という記事を見つけました。

https://github.com/urfave/cli
このライブラリを使い、いくつかのネットワークコマンドを実行するCLIアプリを作ってみる記事です。

今回はこの記事を写経してみました。私が作ったソースは以下になります。
GitHub - SrcHndWng/go-learning-network-cli

単純に写経した訳ではなく

  • 「net.LookupNS(c.String("url"))」→「host」に修正
  • コマンド作成処理を独立したパッケージ(Commands)に切り出した

などの改変を行なっています。

GolangCLIアプリを作る際にはflagパッケージを使うことが多いかと思いますが
より簡単に作りたい場合などはurfave/cliを検討してもいいかもしれません。

Java 10 + Spring BootでTwitter Botを作成してみた

タイトルにあるように、Java 10でTwitter Botを作成してみました。
まあ今後、Java 8から10への移行案件とかもあるかもしれないし、
ということで予習を兼ねて。。。

作ったものとしては、前回書いたGolangでのTwitter Botと同等機能を
持つものになります。
前回の記事はこちら。
GolangでTwitter Botを作成してみた - ソースコードから理解する技術-UnderSourceCode

仕事の予習も兼ねているので、フレームワークはSpring Boot 2系を使ってみました。
あんまり2系固有の機能は使っていないですが。

Spring Bootを使う際、私はSpring Initializr(https://start.spring.io/)でプロジェクトの
雛形を作ることが多いです。
Java 10 で動かすにあたり、作成した雛形のbuild.gradleに以下の定義を行いました。

sourceCompatibility = 10
targetCompatibility = 10

Java 10 ということで、積極的にローカル変数の宣言には「var」を使ったのですが
個人的にはソースがスッキリとして好ましいですね。

作ったものは以下になります。
GitHub - SrcHndWng/learningTwitterRandomSearch

以下、参考にしたサイトです。
javaでツイッターbotの作成 | iBot研究会
Twitter4J - 設定
Twitter Streaming APIをTwitter4Jで試してみる - @thorikiriのてょりっき
スレッドを終了させる | じっくり学ぶ Java講座 [初心者向け・入門]

GolangでTwitter Botを作成してみた

タイトルにあるようにGolangTwitter Botを作成してみました。
EC2などのマシン上でバイナリを常駐させて動かすことを想定しています。

ソースは以下となります。
GitHub - SrcHndWng/go-learning-tweet-random-search at v1.0.0


READMEにも書きましたが、機能としては

  • 予め実行するマシンの環境変数Twitter APIAccess Tokenなどを設定しておく
  • マシン上でバイナリを起動する
  • Twitterのアカウントに「@Account Keyword」形式でメッセージを投げる
  • キーワードで検索した結果からランダムにツイートを選んで返却する

というものです。

検索した結果から返却するツイートを選択するロジックは、
リツイート数 * お気に入り数 * ランダムな係数」が一番大きいもの
を選択しています。

Twitterへのアクセス周りは
GitHub - dghubble/go-twitter: Go Twitter REST and Streaming API v1.1
を使用しました。

作って見ての感想としては、こういうのをサクっと作るのにはGolangは向いているかな、と思います。

以下、参考にしたサイトです。
Writing A Twitter Bot in Golang | TutorialEdge.net
GitHub - dghubble/go-twitter: Go Twitter REST and Streaming API v1.1

Mackerel カスタムメトリックプラグインを開発してみた

先日に引き続き、Mackerelのカスタムメトリックプラグインを開発してみました。
今回は独自のロジックで開発してみました(既に同じようなものはあるかも知らないが・・・)。

作成したのは、AWS S3にあるオブジェクトのサイズを取得し、メトリックに送信するものです。
ソースは以下になります。

GitHub - SrcHndWng/go-learning-mackerel-plugin-aws-s3-size

開発環境はMac、実行環境はAMAZON EC2 Linuxで、それぞれで動作確認をしています。
開発環境にはAWSのクレデンシャル、EC2にはS3にアクセスするEC2ロールが必要となります。

開発の手順は以下の記事と同じです。(ロジックは違うけど)
「Mackerel サーバ監視[実践]入門」を買ってみた - カスタムメトリックプラグイン開発手順メモ - ソースコードから理解する技術-UnderSourceCode

ヘルパーライブラリを利用することで独自のロジックの開発に集中できて非常に楽である
というのが作ってみての感想です。

システムの運用時に監視したい項目があったら、サクッとプラグインを作って監視を行う
ということも十分可能かと思います。

「Mackerel サーバ監視[実践]入門」を買ってみた - カスタムメトリックプラグイン開発手順メモ

Mackerel サーバ監視[実践]入門:書籍案内|技術評論社を買い、読み始めました。
Mackerelの魅力の一つとして、プラグインを自作して独自の監視項目を追加することがあります。

本書を参考に、カスタムメトリックプラグインを作り、Mackerelの画面に表示させてみました。
以下、その時の手順のメモです。詳細は方法は本書を参考にしてください。

前提条件

今回はMac上でプラグインを開発し、Amazon EC2 Linuxに配置して監視を行います。
予めMackerelのアカウントを用意し、EC2インスタンスにはmackerel-agentをインストールしておきます。
開発言語はGolangになります。

※ mackerel-agentのインスタンス手順は公式ヘルプを参考
エージェントをインストールする - Mackerel ヘルプ

開発手順

1. ソースを作成

本書の「5.2 カスタムメトリックプラグインを作る」を参考に、「mackerel-plugin-uptime」を写経します。
今回はバイナリの名前だけ「go-learning-mackerel-plugin-uptime」というように変更しました。

ソースについては本書や、以下のGithub上のソースを参考にできます。
mackerel-agent-plugins/mackerel-plugin-uptime at master · mackerelio/mackerel-agent-plugins · GitHub


2. EC2用にビルド

ソースをEC2用にビルドします。

$ GOOS=linux go build

3. mackerel-agent-pluginsをインストール

EC2にmackerel-agent-pluginsをインストールします。

$ sudo yum install mackerel-agent-plugins

4. mackerel-agent.confにプラグインを追加

/etc/mackerel-agent/mackerel-agent.confに以下を追加します。

[plugin.metrics.uptime]
command = "/home/ec2-user/golang/go-learning-mackerel-plugin-uptime" # 作成したプラグインのパス

5. mackerel-agentを再起動 or EC2を再起動

6. 作成したカステムメトリックを確認

Mackerelの監視画面のカスタムメトリックに、作成したメトリックが表示されていることを確認します。

f:id:UnderSourceCode:20180707190141p:plain

「Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド」をGolangで写経してみた - その2

前回に引き続き、Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド | マイナビブックスGolangで写経しています。
今回はChapter4をやってみました。

GitHub - SrcHndWng/go-learning-serverless-apps at chapter4


Twitterからデータを取得してKinesisに投げるアプリ(twitterToKinesis)については
CloudFormationでEC2を立ち上げ、アプリのデプロイ、起動までを行うようにしてみました。

Kinesisからイベントを受け取るLambda(kinesisToDynamo)については
Serverless Frameworkを使用している以外は、本に書かれている機能をそのまま実装しています。

「Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド」をGolangで写経してみた

Amazon Web Servicesを使ったサーバーレスアプリケーション開発ガイド | マイナビブックスを読み始めました。
ただ読むだけではなく、Golangの勉強がてら、本で紹介されている処理を実装してみました。

実装言語は先に書いたようにGolang、デプロイ周りはServerless Frameworkを使っています。
とりあえずChapter3をやってみたので、以下のGitHubに載せました。

GitHub - SrcHndWng/go-learning-serverless-apps at chapter3

感想としては(まだChapter3までしかやってないけど)・・・
・本の内容については、AWSでのサーバレスのパターンについてソースと構成が丁寧に説明されていると思う
Golangで実装してみた感想は、数ない文字数・if != errによる明確なエラーへの対応が個人的には好み
という印象です。。。