アルパカログ

カスタマーサポート (CS) とエンジニアリングを掛け算したい CRE (Customer Reliability Engineer) が気になる技術や思ったことなど。

Google Cloud Functions を使ったサーバレス LINE Bot の作り方

LINE Bot を Google Compute Engine(GCE) 無料枠で作る際の要点まとめを書いてから、別のアプリ開発で GCE が使いたくなり、GCE を節約するために LINE Bot をサーバレス化しました。

意外と簡単にできてしまった上、メンテナンス性も向上して良いことづくめということで、サーバレス LINE Bot を無料で簡単に作る方法を紹介します。

続きを読む

やってはいけない「20代エンジニアの人付き合い」3つのポイント

エンジニアといえども社会人として働く上で避けては通れない人付き合い・人間関係。

今日20代を終えたばかりの筆者が、仕事で信頼を得るためにやってはいけない人付き合いの最低限のマナーをまとめました。20代の自分への戒めを込めて……

続きを読む

LINE Bot を Google Compute Engine(GCE) 無料枠で作る際の要点まとめ

ℹ️ GCE を使わずにサーバレスでもっと簡単に作る方法 も紹介しています。


manji602さんが Google Cloud Platform(GCP) 無料枠を使っておもしろそうなことをやっていたので私も何か作ってみようと思い、夫婦円満を願って家族のLINEグループに妻の好きな猫をLINE Botで導入することにしました。

私はGoogleクラウドはGAEが出た頃に少し触ったくらいで、当初は確かJavaPythonしか使えず「AWSの方が自由度があって良いな」と思っていたのですが、今回初めてGCPを触ってみると、インターフェースがシンプルでわかりやすく使いやすいと感じました。

そこで、Googleクラウド初心者の私がGCP無料枠の範囲でLINE Botを動かすまでの要点をまとめておこうと思います。

続きを読む

「不安なリーダー」の心理とは?あるエンジニアの独白

Aがリーダーになるのは2度目だ。Aもエンジニアで、中途入社してきた。

Aが初めてチームのリーダーになったとき、Aの上司(マネージャー)はエンジニアだった。

私はAのチームメンバーだが、私の評価はマネージャーが直接決めていた。

だから、Aがリーダーになったからといって何かが良くなることもなく、悪くなることもなかった。

ほどなくして体制変更があり、マネージャーがエンジニアでなくなると同時に、Aがいろいろ決めるようになった。もちろん評価も含めてだ。

私には不安が2つあった。

1つは、Aにチーム運営がうまくできるのかということ。

仕事量が決して少なくない中、Aがチーム運営(たぶん、他部署からの相談とかチームのタスク管理とか)に充てた分の開発はどうやってカバーするのか?

もう1つは、評価とキャリアの問題。

私のいる開発チームはカスタマーサポート(CS)に属している珍しい部門で、先例がない。このままAについていって良いのか、悩ましい。

Aは何を考えているのだろうか?

続きを読む

Elixir の Zendesk REST API クライアントを公開しました

zen_ex という Elixir 向け Zendesk REST API クライアントを公開しました。

zen_ex は Model と Entity からできていて、Model の各関数が Entity の struct を返すようになっています。

使い方は下記のように直感的で簡単です。

iex> alias ZenEx.Model
iex> alias ZenEx.Entity.{User,Ticket}

iex> Model.Ticket.list
[%Ticket{id: xxx, ...}, %Ticket{id: xxx, ...}, ...]

iex> user = Model.User.create(%User{name: "おとよ", email: "otoyo@xxx.xxx"})
%User{name: "おとよ", email: "otoyo@xxx.xxx", ...}

iex> ticket = ZenEx.Model.Ticket.create(%Ticket{subject: "チケットタイトル", description: "チケット本文", requester_id: user.id})
%Ticket{subject: "チケットタイトル", description: "チケット本文", requester_id: user.id, ...}

まだまだ開発途上なのでバグなどありましたら気軽に Issue や PR でお知らせいただければと思います。

Zendesk REST API で複数のチケットフィールドを指定してチケットを検索する

3年前から業務で Zendesk App を作っています。 Zendesk は開発者向け機能が豊富に提供されているところが良いですね。

今日は Zendesk REST APISearch API を使い複数のチケットフィールドを AND 指定してチケットを検索する方法について説明します。が、 Undocumented な方法のため使用は自己責任でお願いしますね。

リクエスト URL

チケットを検索する場合のリクエスト URL は下記のようになるでしょう。

/api/v2/search.json?query=type:ticket {query}&sort_by={sort_by}&sort_order={sort_order}&page={page}

チケットフィールドを含め検索条件は query で指定します。

チケットフィールドの指定

チケットフィールド (カスタムフィールド) の条件は Zendesk Support search reference にあるとおり fieldvalue:12345 のように指定します。

ここで気を付けなければならないのは 12345 の部分は ID ではなく値であるということです。

AND 条件

fieldvalue:12345,67890 のようにスペースを入れず CSV で指定します。


最近は過去に App Framework v1 で作った Zendesk App を v2 に書き換えて少し知見が溜まったので、また気が向いたら書きたいと思います。

logrotate されたログファイルを reopen する

あるデーモンプロセスのログが消えていることに気付きました。
厳密には、 restart した日はログがあるのに、日付が変わってからのログが空っぽなのです。
ログが消えるのは開発者にとって悪夢です。折しも障害発生なんてことがあれば…恐ろしくて想像したくないですね。
今日はデーモンプログラムのログを logrotate によりローテーションさせたときに発生する問題とその解決策についてお話ししたいと思います。

続きを読む