tackeのブログ

ソフトウェアや趣味のギターやカメラのこと、たまに日記とか。

2019年の振り返り、2020年の抱負

2020年、あけましておめでとうございます。

さて、こんなTweetを年始からしたわけでございます。

ひとつひとつ、少しだけ詳しく振り返っていこうと思います。

仕事

2018年12月に転職したので、2019年は新しい会社での働き方に慣れるのと、なるべく早くチームに貢献できるようにキャッチアップなど頑張ってました。 前の会社もメガベンチャーではありましたが小さいチームでそれぞれのプロダクトを開発する環境が多かった一方、今の会社は巨大なひとつのプラットフォームとその周辺システムを開発するかたちになっています。

これまで以上に複雑なシステム間の仕様調整や、レガシーなコードやシステムの歴史を紐解いて現状どのような仕様にするのが適切なのか考える、などなど実装技術だけではなく大きな意味でシステム開発の知見が求められている気がします。 設計、アーキテクチャー、セキュリティ、など多岐にわたり勉強し直し、実務への応用の経験も積んでいかねばなと思っております。

認定スクラムマスター(CSM)、認定プロダクトオーナー(CSPO)の資格は昨年までは更新していましたが、現職の現チームではスクラムを採用してないしもうちょっと開発現場で経験を積みたいというのもあり、更新をやめました。 1万円で2年有効だったので大した出費でも無いのですが、アジャイル関連の実務もなく、個人的に興味も薄れているのに更新するのもな、という感じカジュアルに更新停止しました。 ちゃんと把握はしてないのですが、また資格更新したくなったら再開できるんでしょうか?まあ必要になったら考えます。

ともかく、今後もしばらくエンジニアとして地に足をつけて経験を積んでいこうと思います。

新しいことで言うと、アウトプットや今後のキャリアを考える、と言うのは今年から着手していきたい気持ちがあります。

英語

今年から会社の補助制度を使ってレアジョブ英会話をはじめました。TOEICも会社の補助で定期的に受験できます。 1年弱くらいで英会話のテスト、TOEICともにスコアは少し上がりました。とはいえ全く仕事で使えるレベルにはありません。

現職になってから海外の開発拠点があったり、外国人同僚も多いため英語力を求められる機会が急に増えました。 英語を覚えるとメリットが大きいと言うのは学習するには良い環境だと思います。

今は座学はほとんどせずひたすら英会話だけをしておりましたが1年の伸びを見てもこのやり方ではそろそろ限界っぽいです。 今年は英語学習のやり方を変更していこうと思います。英単語がとにかく弱いのでその辺りから着手していきます。

目指せTOEIC 800点!!! (誰かがTweetしてましたがTOEIC 800点=あんまり英語が得意でない、くらいらしいのでまずはそこを目指します)

減量

これは今年は成果も大きく出ましたが課題も多かったです。 とにかくジムで週3回の筋トレをし食事制限もキッチリとした期間を1月〜3月までやり10kg減量、4〜6月にさらに徐々に4kgくらい減量、7〜9月は徐々に増えつつもキープ、という感じでした。 しかし10月から色々とイベントが増え、さらに12月は忘年会シーズンになり体重も5kgほど戻ってしまいました。

良かったのは筋トレ、有酸素運動、食事制限、これは続けていこうと思います。 課題は飲酒、体の硬さ、目標設定の無さ、あたりかなと思うので今年はしっかり目標を決めて進めていこうと思います。 柔軟性改善についてはジムでヨガを新たに初めてみました。これがなかなかキツイんです。まあやっていきます。 目標は標準体型です!!

ギター

2018年の夏前くらいからギター教室に通いはじめてテクニックを中心に学んでいました。Aldevetzの2月のライブにむけてギターソロのクオリティを上げたい!と言うのが当初の目標でしたがそれはクリアできたと思います。

ライブの様子はYouTubeに上げてあるので貼っておきます。 Aldevetzとしては特に今後のライブは決まってませんし、多分しばらくやりません。多分。

www.youtube.com

その次は引き続き練習曲をやりつつ、新たに会社の軽音部に入部したのでいろんな曲のコピーを中心にやっておりました。月1くらいで部活(好きな曲を挙げて部員からメンバーを募って行うバンドセッション)があるので、今までやったことのないような曲も定期的に練習するのでかなりしんどいですが良い練習にはなりました。 今後は自分のテクニックをまた磨きたいので部活の参加は少し減らしつつ、理論の勉強を新たに初めてゆっくりまったり自分のペースでギターを学んでいこうと思います。

技術

前述の仕事とかなり被りますが、ここへ来てエンジニアとしての基礎力、いわゆるComputer Scienceの知識が必要な雰囲気を感じつつあります。 一応、10年以上ソフトウェアエンジニアとして業務経験もあり必要な技術は都度勉強して来ましたが体系的な知識があったらもっと素早くキャッチアップ&応用ができるのではないかという期待があります。 大学時代の講義(コンピューターのカリキュラムはあったものの専攻ではない)、基本情報、応用情報もずいぶん前に勉強して基礎は無いことはないのですが、「CSの学位」に漠然とした憧れがあります。

最近は、オンラインでCSの学位が取れるような学校もあるようですし、そういったことを実際に実践されている方のブログなども目にしており、すでに30代半ばではありますが大分興味が出てきております。 学位はさておき、英語と同じくこれも日々の生活に組み込む学習計画を作るべきかなと思います。Leetcodeを毎日やる、とか。 これについてはまだ具体的に考えていませんが知見のある方に相談などしていこうと思います。

その他

偶然このTweetを見つけ、目標を明確にしてスクラム形式でスプリントを重ねてベロシティを算出する、というのは計画がなあなあになりがちな自分には割と良さそうだなと思い真似してみようと思います。 失効したとはいえせっかくスクラムマスターの資格も取りましたし。去年の減量で前半戦はしっかり目標を定めてその通りに生活する、というストイックなことを3ヶ月以上続けることができましたし。 今まで自分は怠惰だと思っていましたが、実は計画と管理さえしっかりすれば意外とストイックな生活もイケるのでは?なんて思ってます。 まあどうなるかは1年後にまた気が向いたら振り返りをしようと思います。

2020年はシン・エヴァンゲリオン劇場版も公開されますし、オリンピックもありますし、そういうのをなんとなくマイルストーンにしつつ色々やっていこうと思います。 ではでは〜。

IntelliJ IDEAにて "Cmd+Shift+A" でFind Actionしようとすると黄色いTerminalが出てイラッとするアレをなんとかした話

みなさん。こんにちは。tackeです。

IntelliJ IDEA、使ってますか?

"Cmd+Shift+A" のFind Action機能はもちろんご活用されていますよね?

そんな皆さん向けのTipsです。

まあ表題の通りなんですが、IntelliJ IDEAにて "Cmd+Shift+A" でFind Actionしようとすると黄色いTerminalが出てイラッとすること、ありませんか?

なんかちょっと前からちょくちょく起きててイラッとしてたんですが、原因と対処方法が分かったのでメモしておく次第です。

発生してる問題を再確認

IntelliJ IDEAを起動して、"Cmd+Shift+A" でFind ActionでIntelliJの機能をインクリメンタルサーチで呼び出すぞ〜!

hoge」...っと入力して、Enter!

f:id:tacke:20190525005719p:plain

すると...

えっ!?黄色いTerminalが開いたぞ!?なんで!?なんもわからん!!イライラッ!!

f:id:tacke:20190525005908p:plain

という感じです。

Find Actionはよく使うのでこれは困りましたね。

原因

下記のとおり、JetBrainsのIssueに上がっていました。

https://youtrack.jetbrains.com/issue/IDEA-209726

MacOs 10.14.4 update enables system shortcut Shift-Cmd-A

というわけで MacOS 10.14.4のアップデートで "Cmd+Shift+A" のショートカットがデフォルトで「Search man Page Index in Terminal」というオプションに割り当てられるようになったため、IntelliJ IDEAのFind Action機能とキーバインドが衝突してしまったのが原因でした。

下記のように、JetBrainsのブログにも取り上げられていますね。

intellij-support.jetbrains.com

対策

というわけで話は簡単、キーバインドが重ならないようにしてあげればOKです。

今回はOS側の「Search man Page Index in Terminal」オプションを無効にしてしまおうと思います。

まずは現状確認です。

↓こちらがIntelliJ IDEA側のFind Actionのキーバインドです。"Cmd+Shift+A" が割り当てられていますね。

f:id:tacke:20190525010510p:plain

次にOS側で新しく割り当てられたオプションを確認します。

System Preferences | Keyboard | Shortcuts | Services の順に開くと下記のように「Search man Page Index in Terminal」に "Cmd+Shift+A" が割り当てられていることがわかります。

f:id:tacke:20190525010804p:plain

↓「Search man Page Index in Terminal」のチェックボックスを外してあげればOKです!

f:id:tacke:20190525011021p:plain

はい、これで対策はもう終わりです。

ではみなさん、IntelliJ IDEAで引き続き快適開発ライフを!

macOS MojaveにしてからKarabiner-Elementsで「英数・かなキー設定」を入れいているとブラウザでCmd+クリックで新しいタブで開く機能が使えなくなるやつ

macOS MojaveにしてからKarabiner-Elementsで「英数・かなキー設定」を入れいているとブラウザでCmd+クリックで新しいタブで開く機能が使えなくなるやつ。

はい、タイトルのとおりです。 非常に困っておりました。

が、しかし、つい最近それが解消いたしましたのでメモしておきます。 といっても超簡単で日本語向けの設定を最新版に更新するだけです。

Karabiner-ElementsのPreferencesから日本語設定のバージョンを確認します。 なるほど、現在は rev 2 のようです。 「Add rule」からWeb上のRule一覧サイトに飛びましょう。

f:id:tacke:20190209000347p:plain

Ruleのサイトから「For Japanese (日本語環境向けの設定) (rev 4)」を選んでImportします。

f:id:tacke:20190209000059p:plain

ImportしたらKarabiner側で新しい設定を入れて、古い設定を削除すればOKです。 以下のように設定がrev 3になってるかとおもいます。

f:id:tacke:20190209000744p:plain

どうやら日本語設定がいろいろとまとまったものが rev4で、各設定はそれとは別にversionを持ってるようです。 今回の設定はrev3でしたね。

というわけでこれで晴れて「Cmd + クリック」でいろいろと新しいタブやウィンドウで開く操作が復活しました。 よかったですね。

以上です。

fish shellの設定メモ

転職に伴いMacのTerminalを新たに設定する機会がありました。せっかくなのでメモしておきます。

Terminalでの仕事が快適にできるような自分的「最低限」の設定ができるまでがゴールです。 fish shellといくつかのCLIツールのインストールや設定について書いていきます。 fish shellは予め用意されている設定が多いので、こういう記事で書くことが少なくて便利ですね。

前提

  • Homebrewがインストール済みであること
  • iTerm2がインストール済みであること(Terminal.appでも別にいいけど、気分です)

Install fish_shell

まずはこれをしなくちゃ始まらない。fish shellをインストールします。

$ brew install fish

インストール後のガイドに従って /etc/shells にfishを追加してデフォルトシェルをfishに変更します。

Install fisher

fishのplugin manage fisher をインストールします。

$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

Install peco, ghq, hub

いくつかの便利ツールをインストールします。

peco

インクリメンタル検索便利ツール peco

$ brew install peco

ghq

GitHubリポジトリ管理ツール ghq

$ brew install ghq

以下のようにgit repositoryを置いているディレクトリを設定します。今回は ~/dev/ を指定しました。

$ git config --global ghq.root ~/dev/

hub

GitHub便利コマンド hub

$ brew install hub

~/.config/fish/config.fish ファイルに以下のようにaliasを追記して設定します。bashとはalias記法が異なるので注意してください。

eval (hub alias -s)

completionについては特に何もしなくてもbrew installで設定が追加されるようです。

Install plugins

自分的に最低限必要だなと思うpluginをインストール・設定していきます。

plugin-peco

pecoでhistoryをインクリメンタルに検索できるやつ。便利すぎる。

$ fisher add oh-my-fish/plugin-peco

~/.config/fish/config.fish ファイルを編集して以下のように設定を追記します。

function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
  bind \cx\ck peco_kill
end

peco_select_historypeco_kill をそれぞれキーバインド設定しています。 bind \crcontrol + rbind \cx\ckcontrol + x の直後に control + k という意味になります。 後者は結構すばやくコマンド入力しないと反応しないので素早くコマンド入力する練習をしましょう。

z

過去に訪れたディレクトリに一発で飛べる。便利。

$ fisher add jethrokuan/z

fish-bd

ディレクトリを簡単に遡れるやつ。これも便利。

$ fisher add 0rax/fish-bd

fish-peco_select_ghq_repository

$ fisher add yoshiori/fish-peco_select_ghq_repository

以下のキーバインドを追加します。

function fish_user_key_bindings
  bind \c] peco_select_ghq_repository
end

fish-peco_recentd

z コマンドで頻繁に訪れるディレクトリを peco で選択して移動する。

とのこと。めちゃくちゃ便利。

$ fisher add tsu-nera/fish-peco_recentd

これも以下のようにキーバインドを追記します。

function fish_user_key_bindings
  bind \cx\cr peco_recentd
end

fish設定を反映

ここまで設定すると ~/.config/fish/config.fish ファイルは以下のようになっています。

eval (hub alias -s)

function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
  bind \cx\ck peco_kill
  bind \c] peco_select_ghq_repository
  bind \cx\cr peco_recentd
end

sourceやterminalの再起動などをしてfishの設定変更を反映しましょう。 fishのsourceはbashと記法が異なるため注意してください。 以下のようにすればOKです。

$ source ~/.config/fish/config.fish

以上でプラグインのインストールとキーバインド設定が完了しました。

Config fish

基本的な設定は完了していますが、プロンプトやカラーをお好みで変更していきましょう。 fish_config コマンドを実行するとブラウザでfishの設定変更が可能になります。

私は colorを"fish default"、promptは "Informative" に設定しています。

このままでは暗い文字色が少し見づらいのでiTerm2のカラーも変更します。 iTerm2のカラー設定は iTerm2 > Preferences > Profiles > Colors > Color Presets で変更できます。

f:id:tacke:20181207113815p:plain
iTerm2 > Preferences > Profiles > Colors > Color Presets

私は "Tango Dark" に設定しています。

以上で私的に最低限の設定ができました! fishで簡単便利なshell lifeを!

参考

fish shell fishshell.com

peco github.com

hub github.com

plugin参考 futurismo.biz

fisher github.com

jethrokuan/z github.com

0rax/fish-bd github.com

yoshiori/fish-peco_select_ghq_repository github.com

tsu-nera/fish-peco_recentd github.com

oh-my-fish/plugin-peco github.com

AWS AthenaでS3のログを集計してみた

業務でS3にあるログファイル(JSON行レコード)を集計するタスクをAWS Athenaでやってみたので備忘録。

実はこれ、すでにAWS EMR/Apache Pigで集計しているログファイルなのでPigスクリプトを修正してもよかったんですが実行環境やデプロイが面倒そうだったのと、 Athenaを今覚えたほうが今後の業務で役に立ちそうなのでチャレンジしてみることにしました。 (Pigスクリプトを書いたのは3年前くらいの自分なので頑張れば思い出せるのですが、古い技術を思い出すモチベーションはそんなにない・・・)

そもそもAthenaがSQLで簡単に集計できる、ってのも大きな判断要素ではありました。

というわけでどういう感じで学んでいったかをメモしておきます。

概要を把握

何事もまずは基礎基本から、というわけでまずはAthenaのドキュメントを読んで概要を把握します。

docs.aws.amazon.com

わかったこと

Athena使い方

  • テーブル、データベース、を定義する

次にチュートリアルをやってみます。 日本語の解説を見ながら進めたかったのでこの記事を参考にしました。 blog.serverworks.co.jp

これでざっくりと機能と使い方を把握できました。

というわけで今回の対応を進めていきます。 以下、チュートリアルをやったことある人向け。

テーブルの作成

まずはテーブル作成からです。

S3上のログのパスはだいたいこんなかんじ。 s3://bucket_name/path/to/logs/2018/08/01/00/

Athenaにはパーティション機能があり、Hive形式で s3://bucket_name/path/to/logs/year=2018/month=08/date=01/hour=00/ のようになっていればSQLパーティションを利用できて便利そうだったんですが、今回は単に年月日でディレクトリが切られているだけなので対応しておりません。

こういう場合でも手動でパーティションを作成すれば利用可能なのですが、8月1日のパーティション作成、8月2日のパーティション作成、、、 といった具合にひとつずつパーティションを作成しないといけないようです。

プログラムを作成してJDBCパーティション作成コマンドを一気に発行・・・とかやればいいみたいですが、 今回はアドホックな集計なのでS3パスの指定を対象の年月日を直接指定しパーティションを利用しないようにしました。

今回は以下のように指定しました。こうすると /2018/08/ 以下のすべてのログが集計対象になります。 s3://bucket_name/path/to/logs/2018/08/

ログの形式はJSONを指定します。 JSONだと次ステップのカラム定義の際にで正規表現でログをパースする必要がなくてかなり楽ちんでした。

カラム定義

JSONのプロパティ名をひとつずつカラムとして定義していきます。 JSONパースして一覧を出して選べたりすればかなり楽なのに手動入力なのでつらいです。 しかし、CSVなどの場合は正規表現でパース処理を書かなくてはいけないのでだいぶマシです。

というわけでこれはS3の実際のログを確認しつつ作業します。

ここで、必要ないカラムや値の型が不明なプロパティについては定義しないほうが楽です。 使わないうえによくわからないプロパティをわざわざ定義してパースに失敗するより、定義しないままにしておきましょう。 すべて定義しなくても無視されるだけなので問題ありません。

定義に問題なければプレビューを確認できるので確認しておきましょう。

SQL作成

ここは普通にSQLを書くだけなので特に書くことはありません。

予めS3のログサイズを調べておき実行時間やコストが想定外に膨らまないように注意しましょう。

最初はわざとすくないデーターでテーブルを作っておくといいかもしれません。 (こういう機能がAthenaにあれば簡単なのですが、無さそうです)

結果の確認

AthenaのHisotry、およびS3から確認&ダウンロード可能です。 極力Athena側でクエリに名前をつけて保存しておくと、あとあと再利用などしやすそうです。

所感など

S3のログを手軽にSQLで集計でき、かなり便利でした。 今回はWebコンソールから作業しましたがチュートリアルをやっておけば特に困ることがないぐらい簡単でした。 今後の業務で活用していきたいです。

イマイチなところとしては、SQLをSaveするときDescription入力時にEnterを押すと確定されてしまい、日本語が入力しづらい、というのがありました。。。 これはWebコンソールが日本語化されてないのでいろいろと対応してないところがあるのでしょう・・。まぁそんなに問題ないです。ちょっとつらいだけ。

以上!

Kalafinaブログを閉じました

Kalafina梶浦由記関連のブログを作っていたがはじめに2記事ぐらい書いてから1年ぐらい更新していなかったので記事をこのブログに統合して、ブログは削除しました。

というかKalafina自体がKeiko脱退以降、活動してないですし何書くっていうんだい、っていう・・・。

まぁそんな感じです。

たった2記事ですし、せっかくなのでリンクを貼っておきます。

tacke.hateblo.jp

tacke.hateblo.jp

「LINE Developers Meetup in Tokyo #44 -Agile2018 Conference 報告会-」に参加してきたメモ

「2018年08月28日(火) LINE Developers Meetup in Tokyo #44 -Agile2018 Conference 報告会-」に参加してきました。

line.connpass.com

当初ブログに書くつもりはなかったのでかなり雑なヌケモレだらけのメモですが、せっかくなので記録しておきます。

1) From Output to Outcome

伊藤 宏幸(LINE株式会社)

Agile 2018についての説明

今年、Metricsがカテゴリに昇格した DevOpsは減ったが、それは別でカンファレンスをやるようになったから

Topic

  1. Scaling Agile
  2. Business Agility
    • 正直ハズレだった、とのこと。まだ具体的なはなしがあまりない
    • Outcome
  3. Tech for Trial & Errors

-> Summary Outcome Business

Continuous Delivery

  • Scale teams
  • CD for DB

-> Outcome

Database DevOps

DBもDevOpsやっていく

Chaos Engineering

Metrics (Agile Data)

KeynoteでMetricsについて話していた。

Mob Programming

年がら年中コミュニケーションしてるから、、、 -> 見積もりやらない。 -> デイリーMTGがやらない。

Learning to Experiment

常に実験しながら改善していく。

週7時間、勉強会をやっている。チームのためなら内容は何でもいいし予算も確保している。

Tool

Portfolio Dashboard Poker

メトリクスを選ぶポーカー

Wisdom of Crowds

チームごとの考えをお互い見れるようにする

まとめ

Agile 2019 に応募しよう!

2) Data & Metrics in Agile2018

陶山 育男 様(株式会社サイバーエージェント

Metricsについて

Modern Data (Modern Agileのモジり)

  • Data is Beautiful
  • Data を安全に使う
  • 予測可能性の対価
  • 依存があるとタスクが間に合わない確率的がかなり高くなる!
    • 依存を減らしましょう

The impact of lean

  • SDPI
    • Software Development Performance Index
    • 4つのメトリクスでバランスよく・・・
    • これをつかってチームをはかる
    • WIPを減らすと不具合が減り、デリバリー速度があがる。しかし生産性は落ちる。

3) Making work visible

高橋 陽太郎 様 (株式会社リクルートジョブズ 兼 株式会社リクルートテクノロジーズ)

メトリクスをあえて手で取ってる。

  • 開発はアジャイルだぜー!と思ってたけどビジネス含めて全体では全然アジャイルじゃなかった
  • やろうとしたことを思いついて、着手してからビジネス的にリリースするまでのリードタイムを図ろう

感動したメトリクスの話し

よさそう。あとで。

著者や登壇者と雑談の話し

Christopher Lucian Hunter Industriesのディレクター モブプロの創始者の一人

モブは案件ごとにやり始めて最後までそのメンバーでやり続ける 途中から参加する人のコスト高いから基本的にやらない

モブプロは見積もりしないけど、計画は立ててないの? ビジネスは計画を立ててるけど、開発に強いることはないよ

4) 当たり前を当たり前に

横道 稔(LINE株式会社)

横道さんは Training, Teaching, Coaching にフォーカスしてた

みんな読んでるらしい本 https://www.amazon.co.jp/dp/B0062O7L7S/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

アジャイルを教えるためのセッション

ゲームをするといいですよ、っと。 記憶にも残るし。 -> Communication Game

VARK 人間の学習特性4分類。Visual, AUidtory, Reading/Writing, Kinesthetic どれが強いか、を意識するといいかも

Cone of Learning てっぺんはDiscussion -> いますぐディスカッション隣の人とやりましょう!

Efficiency <-> Effectiveness

感想

運営スタッフ、登壇者、の皆様の発言やふるまいがものすごくオープンで話しやすく聞きやすかった。 これはなにげに、かなりすごいと思った。

メトリクスの話は面白いしやってみたいと思うが、スクラムマスター専任でないとそのための時間は取れなさそう。 現実的にスクラムマスターと開発者を兼任している現場も多そうだし。 ツールで解決できるといいのだが・・・。

自分のチームで依存を減らすのはやりたい。 フロントとサーバーサイドでペアを組んでみると依存は減るかも?(ジャストアイデア

モブプロもやってみたい。 しかしPO不在の状況が多いため難しいかも。