pavlog

ウェブエンジニアがあれやこれやを書きます

【プログラミング言語】モダンなV言語がリリースされたので触ってみる【シンプル且つ高速】

f:id:paveg:20190623140044p:plain

プログラミングしてますか?僕は都内在住のエンジニアで、最近は主にRuby/Go/TypeScriptを触っています。

趣味で競技プログラミングを始めたのでC++も触るようになりました。

そんな僕ですが、6/22にリリースされたV言語に興味を持っています!

最近だとかなりプロダクションコードでも採用されるのを聞くようになったGo言語がありますが、さらにモダンな言語です。

vlang.io

このV言語について公式は以下のように言っています。

Simple, fast, safe, compiled language for developing maintainable software

V言語(The V Programming Language)とは

V is a statically typed compiled programming language designed for building maintainable software. It's similar to Go and is also influenced by Oberon, Rust, Swift.

V is a very simple language. Going through this documentation will take you about half an hour, and by the end of it you will learn pretty much the entire language.

Despite being simple, it gives a lot of power to the developer. Anything you can do in other languages, you can do in V.

出典: https://vlang.io/docs#introduction

...

V言語は、保守可能なソフトウェアの構築のために設計された静的型付言語です。 Goに似ていて、Oberon, Rust, Swiftの影響を受けています。 V言語はとてもシンプルなプログラミング言語です。 30分かけてドキュメントを読めば、学び終えることができます。 単純な言語ですが、他の言語でできることは全てV言語で行うことが可能です。

このV言語は、そもそもデスクトップアプリのVoltを作成するために開発された言語です。 現在開発はAlex Medvednikovによって行われていますが、パッチを出すことも可能です(僕もいくつかパッチを投げました)。 ライセンスにはMITライセンスが採用されています。

インストール手順

$ ghq get https://github.com/vlang/v # vlang/vをcloneする
$ cd v/compiler
$ wget https://vlang.io/v.c # v.cをwgetで取得
$ cc -w -o vc v.c

...

ダメなようです。どうやらディレクトリの参照が誤っている模様。

$ ./vc -o v .
errno=2 err='No such file or directory'
V panic: -o doesnt exist

正しい方法で再度トライしてみる

$ mkdir -p ~/code
$ cd ~/code
$ git clone https://github.com/vlang/v
$ cd v/compiler
$ wget https://vlang.io/v.c
$ cc -w -o vc v.c
$ ./vc -o v .

最後にシンボリックリンクを貼ります。

sudo ln -s $HOME/code/v/compiler/v /usr/local/bin/v

起動してみる

$ v
V 0.0.12
Use Ctrl-D to exit
For now you have to use println() to print values, this will be fixed soon

# Hello Worldを試す
>>> println('Hello World')
Hello World

無事HelloWorldが出力できました!

V言語の嬉しい部分と特徴

特徴

公式サイトに書かれている特徴は、全部入り感があり端的に言って「俺の考える最強のプログラミング言語」っぽいです。

  • C言語と同等のパフォーマンス
  • 高速なコンパイル
  • null / global variable / undefined value などが存在しない
  • Genericsを持つ
  • default Immutable variables
  • default Immutable structs
  • パワフルなグラフィックライブラリ
  • ネイティブなクロスプラットフォームGUIライブラリ
  • 簡単にクロスコンパイルが可能
  • 容易な依存管理と楽なデプロイ

translating C/C++ to V

translating C to V will be available in June. C++ to V will be available later this year.

まだ未実装の機能ではありますが、 C/C++をVへと翻訳することが可能になります。

実行には以下のコマンドを実行します。

$ v translate test.cpp

すると、 test.v が出力されます。

https://vlang.io/docs#cpp

Hot code reloading

詳細については書かれていませんが、いちいちコンパイルする操作が面倒なのであると嬉しいなという気持ちがあります。

その他の機能

便利なところはたくさんありますが、今回は導入記事のため説明を省きます。

軽く書いてみる

C++ で書いていたコードをVに書き換えてみました。

f:id:paveg:20190623140112p:plain

fn gcd(x, y int) int {
    return if (y != 0){gcd(y, x % y)} else {x}
}

fn lcm(x, y int) int {
    return (x / gcd(y, x % y) * y)
}

fn f(x, c, d int) int {
    mut result := x
    result -= (x / c)
    result -= (x / d)
    result += (x / lcm(c, d))
    return result
}

fn main() {
    a := 10
    b := 40
    c := 6
    d := 8
    mut ans := 0
    ans = f(b, c, d) -f(a - 1, c, d)
    println(ans)
}

// output: 23

これは以下のC++の書き換えです。

#include "bits/stdc++.h"

using namespace std;
typedef long long ll;
const ll inf = (1 << 30) - 1;
const ll infll = (1LL << 61) - 1;
const ll mod = 1e9 + 7;
#define REP(i, o, n) for (ll i = o; i < n; i++)
#define rep(i, n) REP(i, 0, n)

ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

ll lcm(ll a, ll b) { return a / gcd(b, a % b) * b; }

ll f(ll x, ll c, ll d) {
    ll res = x;
    res -= x / c;
    res -= x / d;
    res += x / lcm(c, d);
    return res;
}

void actual() {
    ll a, b, c, d;
    cin >> a >> b >> c >> d;
    ll ans = 0;

    ans = f(b, c, d) - f(a - 1, c, d);
    cout << ans << endl;
}

int main() {
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);
    cout << fixed << setprecision(15);
    actual();
    return 0;
}
// input 10 40 6 8
// output: 23

冗長かなと思いましたが、Goに近い文法で書きやすいですね。 標準ライブラリと速さ次第では、全然採用したい。

まとめ

もう少し機能が出揃ってから、V言語で何か作ってみようかなと思える感じでした。

会社のSlackチャンネルにこっそりvlangというチャンネルを開設してますし、気になったことはここで話したりTwitterでも書いていこうかなと思ってますのでそちらもぜひ!

まずは、インストールして触ってみることをお勧めします!

追記

dockerfileを作成したので使ってみてください。

github.com

【6DoF】VRヘッドセット oculus quest を購入した

oculus-quest-top

image: oculus/youtube


VR、バーチャルリアリティ(Virtual Reality)とは人工的に作られた擬似現実を体験できるテクノロジーや機器のことをさしています。 そしてそのVR機器カテゴリの一つであるVRヘッドセットにOculus Questが加わりました。

www.oculus.com

6月頭に届いて*1から2週間弱ですが、没入感と作り込みに大変感動しました。 VR自体は初心者ですが、デバイス的にも完成度が高く安心して楽しめるものになっています。


普段はエンジニアとして仕事をしています。新しいものが好きで、TwitterでのVRヘッドセット(ゴーグル)に対する熱が若干増したのを感じ取り購入を決めました。

Oculus Questのスペック / 仕様

主要なスペック、仕様は下記の項目の通りです。

6DoF

英語で "six degrees of freedom" と呼びます。wikipediaには以下のように書かれています。

3次元において剛体が取り得る動きの自由度のことである。具体的には、前または後・上または下・左または右に(別の言い方では3次元の直交座標系の軸に沿って)動くことができ、また直交座標系の3軸おのおのの周囲を回転できることを指す。

出典: 6DoF - Wikipedia

なんか難しいですね。とにかく自由度が高いってことです。

2018年5月2日に発売された、3DoFの Oculus Goと比べて2倍自由ってことですね。

なんと、いらすとやさんがイラストを公開しているので拝借しましょう。

3DoF6DoF

3DoFでは、頭部分の動きを認識することが可能でした。 6DoFでは、体部分の動きまで認識します。

自分の体の位置を認識することが可能なので、ゲーム内で自分が歩くことが可能です

有線接続不要

オールインワンのVRヘッドセットとなっており、従来のVRヘッドセットのように有線接続が不要です。 僕はこのVRヘッドセットが初だったのですが単純にケーブルが大量に存在することは自身の体の可動範囲を狭めるので、ストレスの原因になります。

その点で、完全ワイヤレスのこのVRヘッドセットはとても身軽で、ノンストレスでその世界へと没入できます。

その他

価格

64GBは49800円 128GBは62800円

購入した直後に価格を忘れることでショックを減らしていましたが、記事を書いてる時に再度向き合うことになり白目を剥きました。

Oculus Goは約半分の金額の25000円で購入可能です。

動画がみれればok!という人であれば、Oculus Goで十分だと思います。 ゲームをするのであれば、Oculus Goの選択はあり得ません。questをクレジットカードで決済して金額を記憶から消しましょう。

(尚、僕は家計簿アプリに連携されて通知がくる為いやでも白目は剥きます)

バッテリー

ゲームプレイ時で2時間程度 連続待機時間は3時間ほどといったところでしょうか。

実際にプレイしてみると1時間程度でもかなり疲れるので、必要十分だと思います。

ディスプレイ

解像度は2880×1600です。 OLED(有機EL)を採用しています。

有機EL最大のメリットは液晶よりも高画質な映像を楽しめることだと思いますが、個人的には解像度はもう一つといった感じでした。これが初VRヘッドセットだったので、そう感じたのだと思います。

プロセッサ

プロセッサは Qualcomm Snapdragon 835 を採用しています。 解説は以下の記事に譲ります。

スマホ向けCPUの「Snapdragon 835」の性能がすごい | ちもろぐ

使い心地

つけ心地も含めて使い心地は良好です。 重すぎることもなく、1時間程度のプレイであればストレスなく使用することができます。

ただ個人的にかなり汗っかきなので、体を動かすゲームなどをやるとすごい汗をかきます。 Beat Saberのhard以上は激しい運動なので、有酸素運動としてかなり良いかもしれないです。

ガーディアン機能

Oculus Questは6DoFで、移動が可能なためゲームプレイに使用する範囲の設定を行う必要があります。 その機能のことをヘッドセットではガーディアンと呼んでいます。

基本的にはプレイするエリアを実際に選択することによって、その範囲から出た場合に警告を行ってくれる仕組みで、これがよくできていて家のものを壊さずにゲームがプレイできています。

実際に家でプレイしてみると都内一人暮らしの部屋(28m2)では明らかに広さが足りず、5000兆円欲しいなどという気持ちがふつふつと湧いてくることでしょう。

早く5000兆円欲しい。

よくできたチュートリアル

ここが一番体験としてはよかった点ですが、Oculus Questのセットアップ後に行えるチュートリアルがめちゃくちゃよかったです。

付属コントローラを用いた手の動きのシミュレートや、VRヘッドセットでできることの多さを一気に体験することができます。

尚プレイ中は、傍目から見ると異常者のような動きをすることになるので注意してください。

おすすめゲーム

大してプレイできてはいないですが、おすすめのゲームを2つほど紹介します。

Beat Saber

store.playstation.com

全身を使った音ゲーで、手にセイバー(剣のようなもの)を持って箱をぶった切っていくゲームです。 リズム感覚が求められるのと一ゲームの時間が短く忙しい人にもおすすめできる作品です。

難易度がハード以上になると、途端に鬼難易度のゲームと化すのは音ゲーの宿命ですが、やってみた感じこちらは体力も求められることでしょう。

譜面覚えゲーだった記憶のある jubeatと違って体力も必要なところが革新的です。

jubeat festo

Creed: Rise to Glory

購入していないですが、デモで汗をものすごくかきました。

ボクシングのゲームです。軽い運動には、もっともおすすめです。

あと脇腹とか痛めます。僕は痛めました。運動不足のお父さんは注意してください。

最後に

なんかNetflixの見心地とか書こうと思いましたが、まだDMMアプリのリリースもされてないようなのでやめました。

あ、あと。ヘッドセット買った人はすぐにプライバシー設定をONにしましょうね。

-> Oculus Go をはじめた人が最初に見直すべきプライバシー設定 - これはただの日記

さあ、君もVRの世界へ。

*1:konozamaに見舞われました

Is Ruby dead? No, it isn't dead.

ruby-image

but it is broken or in the future it will be broken.

というわけで、記事を書いてます。

本日もRubyが壊れたので直していきましょう。

エラーメッセージ

/Users/ikezawa-ryota/.anyenv/envs/rbenv/versions/2.3.7/lib/ruby/2.3.0/yaml.rb:5:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
LoadError: incompatible library version - /Users/ikezawa-ryota/src/github.com/org/repo/vendor/bundle/ruby/2.3.0/gems/psych-3.1.0/lib/psych.bundle
/Users/ikezawa-ryota/.anyenv/envs/rbenv/versions/2.3.7/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in `require': incompatible library version - /Users/ikezawa-ryota/src/github.com/org/repo/vendor/bundle/ruby/2.3.0/gems/psych-3.1.0/lib/psych.bundle (LoadError)
        from /Users/ikezawa-ryota/.anyenv/envs/rbenv/versions/2.3.7/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /Users/ikezawa-ryota/src/github.com/org/repo/vendor/bundle/ruby/2.3.0/gems/psych-3.1.0/lib/psych.rb:16:in `rescue in <top (required)>'
        from /Users/ikezawa-ryota/src/github.com/org/repo/vendor/bundle/ruby/2.3.0/gems/psych-3.1.0/lib/psych.rb:13:in `<top (required)>'

bundle install が通らなくなってしまった。原因不明、突然の病です。

復旧手順

備忘録的に手順を記載しておきます。

rm /Users/ikezawa-ryota/src/github.com/org/repo/vendor/bundle/ruby/2.3.0/gems/psych-3.1.0/lib/psych.bundle
bundle install

結論

形あるものはいずれ壊れる

Rubyは死んでない

【HHKB】年度が変わったのでキーボードを綺麗にする

cleaning-keyboard-hhkb

新元号の令和が発表されてましたね。平成も残すところわずかとなりました。

この記事を書いているのは2019年4月7日、年度が開けたので心機一転キーボードも清掃しました。


僕は、普段五反田でソフトウェアエンジニアをやっています。

最初に断っておきたいのですが、最近ミニマリストの思想に毒されており、キーボードは携行していません。

今回清掃したHHKBは完全に自宅用と化しています。

僕が所持しているHHKBはブルートゥースなこともあり、PCの繋ぎ変えが面倒くさいんですよね。

コードが増えるのも癪だし…

目次

キーボードの紹介

PFUのHHKB Professional BTを使っています。

スイッチ機構に静電容量無接点方式を採用しています。電極が接することなく一定レベルに近づけば回路が接続されてキー押下を認識する仕組みのため、物理的な接点が無く、信頼性と耐久性に優れています。

出典: 特徴 | REALFORCE | 日本製プレミアムキーボードの最高峰

静電容量無接点方式であり、持久性と耐久性に優れているようです。

タイピングをする際も小気味よく、ストロークもFILCOより浅く個人的にはちょうど良いです。

またテンキーを廃してコンパクトなサイズのキーボードであるため、持ち運びにも便利です(最初は重要なポイントでした)。

無刻印の方がカッコいいとは思いましたが、キー位置を覚えるのに不安感がありました。

そのため刻印有りのUS配列を使っています。

www.pfu.fujitsu.com

清掃手順


準備


清掃を行うにあたって必要な道具がありそうだなと思いました。

キーキャップを破損してしまう人もいるので専用工具と、掃除用品ですね。

エアブロワーは切れてたことを忘れていたため、今回は使用しませんでした。

FILCO Keypuller キーボードメンテナンス用キーキャップ引き抜き工具

  • キーキャップを破損するのが嫌だったので、必須だと思い購入しました。
  • 引き抜くのに時間がかかりますが、丁寧に引き抜くことが可能です。
    • 破損する可能性をかなり下げられる。

綿棒

  • 家庭でおなじみの綿棒です。僕は普段耳掃除に使います。耳掃除をやりすぎると良くないようなので気をつけてください。

クリーニングクロス

  • ほこりを綺麗に拭き取るためのクロスです。適当に購入してください。300円ぐらい。

清掃

  1. キーキャップを引き抜きます without-key-cap-hhkb

  2. 汚れのひどそうな部分を綿棒でこすります

    1. こすりおわったあとはクリーニングクロスで拭きます
  3. キーキャップも汚れの気になるところをクロスで拭き取ります
  4. キーキャップを取り付けます
    1. キー配列がめちゃくちゃにならないようにしてね!(QWERTY配列で検索しました)
    2. スペースの中央部分にバネがあるのでなくさないようにしてね!

portfolio-without-key-hhkb

清掃後に思ったこと

  • 1年に1回ぐらいは内部清掃も含めてやった方が気持ちいい
  • エアブロワーなしで断行するのは時間の無駄感ある
  • キーキャップを掃除するのは、超音波洗浄機とかほしい

hhkb-cleaned

まとめ

ブログを7割ぐらい書いてから気がつきましたが、同じような記事を書いたブログを発見しました。

ちなみに、見なかったことにしてことなきを得ました。

最近、僕のツイッターのタイムラインでは比較的分離キーボードが人気です。

社内にもキーボード部があるため、活動が盛んな上に周りに使っている人が多いので勧められたりもするのですが、ミニマリスト原理主義に憧れている僕は使わないだろうと思ってます。

急に半田付けしたりするので、注意が必要です。

(作らないとは言ってない)

今回は、清掃の記事でしたが興味があったら以下のリンクから購入できるので、ぜひ買ってみてください。 とはいえHHKBは普通に高いのでよく考えて…

【CI/CD】now + CircleCI を使ってお手軽にリリースプロセスを自動化して、最速でデプロイする

f:id:paveg:20190321040810p:plain

みなさんCI/CD回してますか?

アジャイル開発手法*1は、開発を行なう上で有効なケースが多く、そういった手法で開発を進める上では、CI/CDを使うことがとても生産性に寄与します。ソースコードへ変更が行われる度に自動でコードテストを行ったり・デプロイをすることによって実行忘れやオペレーションミスを防ぎ、かつ品質を高めることが可能です。

CI/CDとは「Continous Integration/Contiious Delivery」の略で、日本語では継続的インティグレーション/継続的デリバリーといいます。CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法を意味します。CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。

CI/CDのエキスパートが解説:CI/CDとは何か? なぜ今、必要とされるのか? (1/3):CodeZine(コードジン)

小さい粒度の変更を素早くテスト・リリースしてフィードバックを得るイテレーションを回し続けることは開発を続ける上で非常にメリットがあります。

最近だと、jawsdays で登壇されてた方のスライドがとてもよかったです( ポジティブな Toriさん )。


上記のスライドほど複雑なことはしないですが、今回は個人開発でもお手軽に継続的なインテグレーションを回す環境をnowcircleCI を使って作ってみます。


今回使用するサービス・プラットフォーム


What is now


now とは Next.js を開発しているzeitが提供するサーバーレスでデプロイが可能な新しい PaaS*2 です。

Now makes serverless application deployment easy.

Don’t spend time configuring the cloud. Just push your code.

Now - ZEIT

簡単な now の設定や使い方については以前の記事をご参照ください。

www.pavlog.tokyo

サーバーレスで高速にデプロイを可能にするためのプラットフォームであると覚えておくと良いです。


What is CircleCI


CircleCI とは「継続的インテグレーションと継続的デリバリー」、つまりCIにおけるリーディングソフトウェアです*3

circleci.jp

CircleCI はWebサービスなので、登録を行うことですぐ使い始めることが可能です。

最近のウェブアプリケーション開発を行なっている会社では結構CircleCIを使っている企業は多いと思います。

自動デプロイのための準備


ここからが本題です。今回は nowCircleCI を使って、自動デプロイの設定をしていきます。

事前に circleCIのプロジェクトセットアップと now の登録は済ませておいてください。

実際に僕が今運用をしているrepositoryを使って説明します。

( create-react-app から作成した作りかけのポートフォリオサイトです。)

用意しないといけないのは、下記のファイルです。

  • now.json
    • now の設定ファイル
  • .circleci/config.yml
    • CircleCI の設定ファイル
  • Dockerfile
    • Pull Requestでのデプロイに必要

now.json


{
  "version": 2,
  "name": "portfolio",
  "builds": [
    {"src": "package.json", "use": "@now/static-build", "config": {"distDir": "build"}}
  ],
  "routes": [
    {"src": "/static/(.*)", "headers": {"cache-control": "s-maxage=31536000,immutable"}, "dest": "/static/$1"},
    {"src": "/favicon.ico", "dest": "/favicon.ico"},
    {"src": "/asset-manifest.json", "dest": "/asset-manifest.json"},
    {"src": "/manifest.json", "dest": "/manifest.json"},
    {"src": "/precache-manifest.(.*)", "dest": "/precache-manifest.$1"},
    {"src": "/service-worker.js", "headers": {"cache-control": "s-maxage=0"}, "dest": "/service-worker.js"},
    {"src": "/(.*)", "headers": {"cache-control": "s-maxage=0"}, "dest": "/index.html"}
  ],
  "alias": [
    "pavlog"
  ]
}

.circleci/config.yml


version 2.1を使って config.yml を記述しています。

now というジョブが重要で、今回の設定の肝となります。

nowのグローバルインストールと now(デプロイコマンド)の実行をトークンを指定して行なっています。

またブランチにmasterブランチを指定することによって、PRがマージされたタイミングでデプロイが実行されます。

version: 2.1
defaults: &defaults
  working_directory: ~/repo
  docker:
    - image: circleci/node:11.12

commands:
  prepare:
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package.json" }}
            - v1-dependencies-
      - run: npm install
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}

jobs:
  now:
    <<: *defaults
    steps:
      - prepare
      - run:
          name: install now
          command: sudo npm install -g --unsafe-perm now
      - run:
          name: deploy
          command: |
            now -t ${ZEIT_TOKEN}
            now alias pavlog -t ${ZEIT_TOKEN}

workflows:
  deploy:
    jobs:
      - now:
          filters:
            branches:
              only: master

トークンを取得する


こちらからデプロイ用のトークンを取得します。

f:id:paveg:20190321032842p:plain

CREATEを押してから、任意の名前をつけてCREATE TOKENを実行しTokenを作成します。

f:id:paveg:20190321032938p:plain

作成後に、トークンをクリップボードにコピーしてください。

次にCircleCIで下記のようなURLから環境変数の設定行います。

  • usernameは個人のgithub user name
  • reponameは個人のgithub repo name

https://circleci.com/gh/username/reponame/edit#env-vars

f:id:paveg:20190321033307p:plain

valueへ先ほどコピーしたTokenを貼り付けて Add Variableを押します。

Dockerfile


ARG NODE_VERSION=11.12.0
FROM node:${NODE_VERSION}-alpine as build
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
COPY . ./
RUN npm run build

FROM nginx:1.15.2-alpine
COPY --from=build /usr/src/app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

実際に自動デプロイを行う


修正PRの作成


~/src/github.com/paveg/portfolio master*
❯ git checkout -b check-auto-deployment
Switched to a new branch 'check-auto-deployment'
...

~/src/github.com/paveg/portfolio check-auto-deployment*
❯ git add README.md public/index.html src/containers/About/About.tsx

~/src/github.com/paveg/portfolio check-auto-deployment*
❯ git commit -m "Fix README.md and public/index.html"
[check-auto-deployment 8781373] Fix README.md and public/index.html
 3 files changed, 4 insertions(+), 4 deletions(-)

~/src/github.com/paveg/portfolio check-auto-deployment
❯ git push origin check-auto-deployment
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (9/9), 823 bytes | 205.00 KiB/s, done.
Total 9 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
remote:
remote: Create a pull request for 'check-auto-deployment' on GitHub by visiting:
remote:      https://github.com/paveg/portfolio/pull/new/check-auto-deployment
remote:
To https://github.com/paveg/portfolio
 * [new branch]      check-auto-deployment -> check-auto-deployment

Githubへ移動し、Pushした変更をMasterへマージするPRを作成します。

PR作成後


PRを作成すると、設定済みのnowはdeployを開始します。

f:id:paveg:20190321034438p:plain

deploy完了後は、ステージング環境としてデプロイ先にアクセスが可能です。

f:id:paveg:20190321034630p:plain

https://portfolio-q8oqbi0i1.now.sh/

修正に問題がないので、マスターへ向けてマージします。

すると、今後はmasterブランチでフィルタしていた処理が、CircleCIにて実行されます。

f:id:paveg:20190321035037p:plain

マージ前にステージングデプロイは行なってくれるので、ここであれこれ触ることも可能です。 最高ですね。

プロダクションリリース後

zeitのWebページより、プロジェクトダッシュボードを確認するとリリースが完了していることがわかります。

f:id:paveg:20190321035257p:plain

また、先ほどステージングリリースの際に使ったブランチも残っていることが確認可能です。

ブランチ名がそのままurlへと反映されてますね。

https://portfolio-git-check-auto-deployment.pavegy.now.sh/

まとめ

  • nowでお手軽に確認できるstaging環境の作成が可能
  • now + circleCIで、自動リリースプロセスが作成可能
  • 普通にCIrcleCIいらなかったわ

気をつけることは、private repositoryにしても静的ファイルが全て見えちゃうはずなので、課金が必須だということぐらいです。

鍵とかの管理は気をつけましょう。circleCIのenvとかでやりましょうね。

よかったら記事のシェアをお願いします 🙄

追加調査


普通にCIrcleCIとかいらなかったわ

zeit.co

Githubと繋いでインテグレーションを有効にしてmasterにpushしてください。

CircleCIとかいりませんでした。本当にありがとうございました。

時間返して…😇 now最高なんやな…

*1:プロダクトを少しずつ開発していく手法

*2:Platform as a Service - アプリケーションを実行するためのプラットフォームをインターネットを介して提供するサービスのこと

*3:米Forrester社が挙げています

【簡単デプロイ】nowを使って簡単に自分のポートフォリオを公開する

こんにちは、pavです。 みなさん確定申告終えましたか?

3/15が締め切りなので、まだやってないとかいう人はいないと思います。

僕は普段業務でバックエンド寄りの開発 + PjMをしてるんですが、最近フロントエンドをしっかり勉強しないとまずいなという気持ちになってきました。

なので、勉強がてらポートフォリオサイトを作成することにしました。

いつも勉強する時に、初期構成をモリモリにしすぎて普通に挫折したり頓挫することが多いです。 なので今回は学びたい技術にフォーカスして、作りきること を目標にしました。

今回使う技術は React + Redux + TypeScript です。

まあここまで書いておいて残念ながら、フロント周りの話は今回一切出てきません。

また別の記事で書こうと思います。

目次

webサイトを公開するに当たってnowを使う

このブログもそうですが、作ったものを公開する時のスキームとか手順ってめっちゃ重要だと思ってます。 会社内での開発はリリースすることが前提なので、とくに問題ないですが…

個人で開発を行なうということはいかに「リリース作業が簡単か」ということが、継続にも繋がってきます。

以前は、高機能ホスティングで有名な netlify なんかを使って github pagesでブログ書いてたりもしたんですが結局運用が面倒臭くなってはてなに課金したんですよね。

Netlify: All-in-one platform for automating modern web projects.

今回はどうせだから新しい技術とか面白そうなものに触れてみようと思って、 now を触ってみることにしました。

zeit.co

普通に、ポップじゃないウェブサイトがめっちゃ好きです。厨二病なので。

The Global Serverless Platform

まあ、多分グーグル翻訳にかけると「グローバルサーバレスプラットフォーム」とか返ってきそうなわかりやすいキャッチです。 Globalって単語が特に好きです。

Our mission is to make cloud computing accessible to everyone.

かっこいいですね、誰しもがクラウドコンピューティングを利用できることがミッション。最高だ。

nowの初期設定

nowを初期設定していきます。

まず now を入れる。

❯ npm i -g now

nowコマンド打つと普通に deployされて焦る。普通に。困る。

新規アプリの作成

まあ、今回はreact-appを作るって言ったんで、 create-react-app にしておきますね。

now init しましょう。

❯ now init
> Select example:
  Abort
  apollo
  bash
❯ create-react-app
  docz
  express
  express-twitter-dreamify
  gatsby
  go
  go-image-to-ascii
  gridsome
  html-minifier
  mdx-deck
  mdx-deck-advanced
  monorepo
(Move up and down to reveal more choices)

create-react-app を選択したら、 ディレクトリ作成が完了しました。

> Select example: create-react-app
> Success! Initialized "create-react-app" example in ~/src/github.com/paveg/create-react-app. To deploy, `cd create-react-app` and run `now`.

appルートディレクトリに移動しておきます。

❯ cd create-react-app

うっかりデプロイできる

すごいんですよ、うっかり LJK; now ってコマンド叩くとデプロイされます。

~/src/github.com/paveg/create-react-app
❯ now
> Deploying ~/src/github.com/paveg/create-react-app under pavegy
> Using project my-react-app
> https://my-react-app-2dy554b80.now.sh [v2] [in clipboard] [3s]
┌ package.json        Ready               [1m]
├── asset-manifest.json (779B)
├── favicon.ico (3.78KB)
├── index.html (2.01KB)
├── manifest.json (306B)
├── precache-manifest.403868912749a458d8d1270e82ce54d6.js (606B)
├── service-worker.js (1.02KB)
├── static/css/main.a3566127.chunk.css (1.07KB)
├── static/css/main.a3566127.chunk.css.map (2.91KB)
├── static/js/main.7a406d4a.chunk.js (1.31KB)
├── static/js/main.7a406d4a.chunk.js.map (7.17KB)
├── static/js/runtime~main.229c360f.js (1.47KB)
├── static/js/runtime~main.229c360f.js.map (7.81KB)
├── static/media/logo.5d5d9eef.svg (2.61KB)
├── static/js/1.9a03d35e.chunk.js (117.57KB)
└── static/js/1.9a03d35e.chunk.js.map (337.32KB)
> Success! Deployment ready [1m]

my-react-app-2dy554b80.now.sh

まあ、LJKでもなんでもないんですけど。

エイリアス貼る

zeit をそのまま使ってると project_name - hash でurlが決まるんですよね。 ドメインもzeitで買えたりはするんですけど、 ぶっちゃけ portfolioで集客して アフィリエイトとかそういうのアレじゃないですか。 面倒臭くないですか?まあ俺は面倒臭いんですけど…

そこでエイリアス機能です。俺みたいな面倒臭がりにぴったしなんですよね。

❯ now ln pavlog # now alias pavlog
> Assigning alias pavlog to deployment portfolio-jc530tm8h.now.sh
> Success! pavlog.now.sh now points to portfolio-jc530tm8h.now.sh [4s]

ln or aliasコマンドでエイリアスを貼れます。

https://pavlog.now.sh/ (作りかけのサイトです)

これはすげえや。

now、まずかっこいいし。 俺もnowになりたい…

まとめ

〜なう という死語を叩くだけで簡単にデプロイできる。

最初は真面目に書いていたんですが、久しぶりに家でお酒飲んでしまってそれどころじゃありませんでした。

あ、でも now は本当に便利だと思うのでぜひ使って見てください。 ブルーグリーンデプロイとかできるようなので。

zeit.co

寝ます。

【開発】readlineがbrewによってupgradeされてしまった時の対処方 - 備忘録

brew install cj-bc/cj-bc/readline

あ、忘れてください。このコマンドは魔法のコマンドです。

brew upgradeなどを迂闊に叩いてしまって、環境が壊れてしまった皆さん。こんにちは。 readlineが8系に更新されて喜ばしいことではあるものの、迂闊にアップデートしてしまったが故に環境がぶっ壊れてしまいました。

本来なら、8系に更新するように環境を改善すべきですが、手元ではまだ8系に対応してなかったり、8系へ更新するよりも7系を使った方が問題が起こらないライブラリもいるものです。

会社と自宅のPCで両方このreadline問題を踏み抜き、ターミナルを叩きながら頭が沸騰したので、忘れない内に記事にしておこうと思いました。

何故かは知らないですが、8系にアップデートした瞬間に7系が消えるので元に戻すのも大変なんですよね。 homebrewが便利なのかわからなくなってきました。 いや便利なんですけど、便利すぎて内部実装がよくわからん感じですね。 ソース読めという話ですが…

目次

readlineを8系から7系へダウングレードする

そう、これです。7系を使い続けたい。 まあ awk とかいるんでね…、使い続けたいんですよ、こっちは。

お酒飲みつつこの記事書いているので、僕は心底辛い気持ちになってます。

readline 7系が残ってる人

brew info readline して7系がいる人は適当に brew switch してください。 switchコマンドがわからない?ヘルプ嫁。

残ってない人

❯ brew info readline
readline: stable 8.0.0 (bottled) [keg-only]
Library for command-line editing
https://tiswww.case.edu/php/chet/readline/rltop.html
/usr/local/Cellar/readline/8.0.0 (48 files, 1.5MB)
  Poured from bottle on 2019-03-01 at 22:20:47
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/readline.rb
==> Caveats
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

For compilers to find readline you may need to set:
  export LDFLAGS="-L/usr/local/opt/readline/lib"
  export CPPFLAGS="-I/usr/local/opt/readline/include"

For pkg-config to find readline you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"

==> Analytics
install: 417,448 (30 days), 1,146,052 (90 days), 3,645,745 (365 days)
install_on_request: 47,232 (30 days), 124,500 (90 days), 351,817 (365 days)
build_error: 0 (30 days)

7系とか知らんけど消えてた人、一緒に入れ直しましょう。やり方ね、調べます。俺が。 勝手にclean up しないで欲しいですね、意図しない動きをするな

❯ brew unlink readline
❯ brew install cj-bc/cj-bc/readline

# or

❯ brew install cj-bc/cj-bc/readline
❯ brew unlink readline
❯ brew link --force cj-bc/cj-bc/readline

とりあえず叩いて見てくれ、治る。 そして、とりあえず叩いて壊れても文句言わないでくれ、この記事を読んでる君はきっと、エンジニアかエンジニア志望だろ。

github.com

まとめ

環境が治ったのでゴリゴリコード書きます。

【麻布テーラー】筋トレでスーツが着れなくなったのでパターンオーダーで作った話

f:id:paveg:20190310183913p:plain

トレーニングを始めて3年目になりました。 本格的に通う頻度をあげたのはここ1年半ぐらいなので、実際には2年ぐらい。

最近は副業をしていたり、ブログを書いていたり、趣味(楽器)も触り始めたりして絶望的に時間が足りてないです。

また花粉の飛散もあって外出を控えているので、ジムへは足が遠のいています

若干バルクダウン*1してしまいました。

食事に気を遣いつつ筋トレを継続する生活はモチベーションの低下と共に飛んでいきました。

そんな僕ですが、筋トレを始めてから起こった出来事の一つに今まで着ていた服が着れなくなったことがあります。

目次

体重の変化


大学卒業時に着ていたスーツは、体重が56kgとかの時に作っていたもので当時はめちゃくちゃ細かったです。 とはいえ、ガリガリの人と比較すると骨も太いほうだと思うので、そこまでではあります。

社会人になってから、ストレスもあるのでしょうが体重は微増しました。60kg前後をうろうろする感じ。

筋トレを始めてから


2016/03に筋トレをスタートして当時の体重は確か61kgぐらいだったと記憶しています。

途中の経過があまりなく、体重計を購入したのが2017/06ぐらいだったんですが、この時点で体重は66kgありました。

食べる量が多く、当時はめちゃくちゃな食事をしていたと思います。 ピーク体重は2017/10の71kgで、大学の時から比べるとおおよそ15kg体重が増えました。

ちなみに現在は65kgぐらいをキープしています。 尚、夏前に脂肪を落としたいので、60kg割りたい気持ちがあります。

服が着れなくなる


先ほどの「体重の変化」で触れたように1年半ぐらいで10-15kgほど体重が増加したため、問題が出てきます。 服が着れなくなるんですよね。

僕の場合は、上腕が太かったので、上腕のサイズにアームホールを合わせると丈や袖が長くなりすぎるというケースが多かったです。 zozotownの測定値では上腕が37cmあるそうです(もっと細いと思いますが…)。

そしてスーツが致命的で、吊るしで販売されているスーツは凡そ標準体型に基づいて作られているため悲惨でした。 シルエットを考えると、大きいジャケットは肩も落ちるので当然着ることができなかったです。

2018年の夏から冬にかけて結婚式のお誘いが何度かあったためスーツを作らなければならなかったこともあり これを機にと思ってパターンオーダーでスーツを作ることにしました。

職業柄、スーツを着ることがほとんどないのでスーツに詳しい友人に話を聞きつつデザインやオプションを決めました。

スーツの詳細


今回は「麻布テーラー」で仕立てることにしました。

「ZOZOスーツ」なんかも選択肢にはあったのですが、出たばっかだったので選択肢から外れました。

モデルと色はクラシカル且つ使えるケースが多いものを選びました。

CLASSICO ITALIA 英国のビスポークに影響を受けながら、イタリアならではの感性が融合された、戦うビジネスマンに最適なモデル。着心地を追及するための毛芯使いなどで柔らかな着心地です。

スーツモデル – パーソナルオーダースーツ・シャツの麻布テーラー|azabu tailor

  • Model: クラシコイタリア
  • Color: 濃紺

細かいオプションは下記を選択 * センターベント * フロントボタンは2ボタン * ノータック * シングルモーニングカット

追加でシャツがなかったので、シャツも購入しました。

  • Color: 白
  • 無地ポプリン
  • セミワイドカラー
  • ボタンを白蝶貝へ変更
  • カフスもいけるハイブリッド

www.azabutailor.com

これをパターンオーバーで発注しました。 スーツ自体の価格は税込83700円だったと思います(若干生地によって値段が上下します)。

この他にも 黒のストレートチップ、タイピン、チーフ、ネクタイなどを購入しています。 結構出費が嵩むなあという感覚がありました。

「麻布テーラー」さんの話をしておくと、 店員さんはめちゃくちゃ丁寧で1から10までスーツについての質問に答えてくれましたし、 何よりここは太くして欲しいとかここは細くみたいな要望の一つ一つにバランスを考慮しつつ考えてくれたのがよかったです。

まとめ

筋トレしすぎた結果スーツを作るハメになったのですが、その他にも色々なところに影響が出ています。

ですが作ったスーツはめっちゃ良くて、今まで買っていた吊るしのスーツとは比にならないほど気に入ってます。

なんならもう一着ぐらい欲しいぐらいです(今度は黒かグレー)。

何が言いたいかっていうと、筋トレって食事もそうですが服もお金がかかります。

だけど、鍛え上げた体はかけがえのない宝です。

記事を書いてたらジムにいきたくなってきました。

すみません、ジムへ行ってきます。

www.pavlog.tokyo

*1:筋肉や体が小さくなる事

【Golang】ghqでGitRepositoryのパッケージをインストールする / 備忘録

僕はGolang初心者です。そして普段ghqを使ってgitrepositoryの管理をしています。

ブログやリポジトリには、稀にレポジトリ階層下のパッケージのインストールだけ明示する説明があったりします。

そのため、筆者は雛形を生成するためのskeletonというCLIツールを作りました。 次のようにgo getでインストールすることができます。

$ go get github.com/tenntenn/gosa/skeleton

出典: Goにおける静的解析のモジュール化について - Mercari Engineering Blog

(※今回「静的解析ハンズオン」のために記事を読み進めつつ、 手を動かしていたので使っているパッケージが @tenntenn さんのものとなっています。)

golangtokyo.connpass.com


・目次


発生したエラー


話を戻して、直接ghqを用いてダウンロードを行ってみます。

今回は先で挙げた勉強会の学習用に skeleton をインストールしてみます。

❯ ghq get github.com/tenntenn/gosa/skeleton
     error Not a valid repository: https://github.com/github.com/tenntenn/gosa/skeleton

当たり前ですが、上記のようなエラーが発生するはずです。

パッケージ単位でのインストールが必要になったりするので、備忘録的に記事に起こしておきます。

リポジトリ単位でダウンロードする


パッケージ単位で試みると、Not a Valid repository と言われるので、

リポジトリ単位で指定してからパッケージのインストールを行います。

❯ ghq get github.com/tenntenn/gosa
     clone ssh://git@github.com/tenntenn/gosa.git -> /Users/ikezawa-ryota/src/github.com/tenntenn/gosa
       git clone ssh://git@github.com/tenntenn/gosa.git /Users/ikezawa-ryota/src/github.com/tenntenn/gosa
Cloning into '/Users/ikezawa-ryota/src/github.com/tenntenn/gosa'...
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
remote: Enumerating objects: 228, done.
remote: Counting objects: 100% (228/228), done.
remote: Compressing objects: 100% (153/153), done.
remote: Total 228 (delta 57), reused 185 (delta 31), pack-reused 0
Receiving objects: 100% (228/228), 2.98 MiB | 918.00 KiB/s, done.
Resolving deltas: 100% (57/57), done.

ダウンロードできました。

❯ ghq list | grep gosa
github.com/tenntenn/gosa

実際にパッケージをインストールする


それでは、実際にパッケージをインストールしていきます。

といっても手順は簡単です。

事前に skeleton が存在しないことを確認します。

~/src/github.com/tenntenn/gosa/skeleton master
❯ pwd
/Users/ikezawa-ryota/src/github.com/tenntenn/gosa/skeleton
❯ which skeleton
skeleton not found

存在しないことが確認できたら、 skeleton ディレクトリに移動して go install を行います。

~/src/github.com/tenntenn/gosa/skeleton master
❯ go install
❯ which skeleton
/Users/ikezawa-ryota/bin/skeleton

実際に which コマンドで叩いて見ても skeleton が存在しているようです。

今回出てきたツールと静的解析向け記事の紹介


  • ghq
    • go標準で使える go get のようなコマンドを提供するツールです。特定のルートディレクトリを指定することが可能で、指定したディレクトリ以下へ git clone を行います。

github.com

budougumi0617.github.io

goの勉強頑張っていきます。

【確定申告もするよ】エンジニアが副業をしてわかったメリットとデメリットについて書く【サイドジョブ】

f:id:paveg:20190305230112p:plain

五反田でウェブエンジニアをしているpavです。

昨年は「副業元年」とも言われ、副業が「働き方改革」において促進された一年でした。

「働き方改革実行計画」(平成29年3月28日 働き方改革実現会議決定) を踏まえ、副業・兼業の普及促進

出典: 副業・兼業|厚生労働省

有難いことながら、こんな僕も昨年8月より副業をさせていただいてます。

半年ぐらい副業をやってみて振り返りをしてみようと思います。実際の単価などについては個人のスキルセットややりたいこととマッチするかどうかも重要なのでここでは触れません

エンジニアの目線から副業を始めた動機とメリット、そしてデメリットについて書いてみようと思います。

今、副業を始めてみようかなと思っている人がいたらぜひ参考にしていただけますと幸いです。



・目次

副業を始めた動機


一番最初の副業をしようと思った理由は、社内に副業をしている人が多かったことです。

また本業ではクラウド会計のソフトウェア開発に携わっていたので、ドッグフーディングもしたいと思っていました。

「ドッグフーディング」とは企業が自社の製品を使用することを意味する言葉です。

ドッグフーディング:企業が自社サービスを使うべき理由 | UX MILK

開発には携わっていましたが、関わる一部分しかプロダクトを触ることがなかったので、もっと知りたかった側面も大きいです

結果的にはそこまでプロダクトを知るという部分について効果は出なかったですが…。

もう一つの点として、技術力という点でコーディングスキルに対する不安が大きかったです。

せっかく副業OKと言われているのだから、自分のスキルが陳腐化していないか確認したかったし、外の世界で通用するのか試したい気持ちが強かったと思います。

もちろん副業などせずとも、外部の勉強会やOSSへのコントリビュートなど自分のスキルを陳腐化させない方法はいくらでもあります。

しかし個人的にお金をもらうことで自分のスキルに対して向き合える(評価していただける)と思っていました。

実際に副業を始めてみて


副業の稼働は8月中頃から始まって、初の副業がフルリモートワークの案件でした。 結果からいうと、お仕事させていただいた企業さんには比較的好印象だったように思います(思い込みかもしれん)。

普段の業務では、気軽に対面コミュニケーションを行うことが可能なので、細かく気になることを確認できた、フルリモートワークだと難しいなと感じました。

特に気になることはメモして細かく聞いた方がよいです、掘り下げましょう。

特にコミュニケーションを通して意識していたのは以下の4点です。


  • アウトプットを意識して、細かい粒度でPRを投げてみる
  • 疑問に思ったことを率直に質問してみる(空気を読まない)
    • わからない部分はハッキリ聞く
  • 依頼されている業務だけでなく気が付いたことは確認(質問)をする
    • 例) ドキュメンテーションで問題がありそうな部分や全体で生産性に寄与する部分があれば細かく確認する
  • 勤怠について細かく共有する


社会人の基本とされているホウレンソウを守ることと、いつも以上に細かく質問(確認)を行っていました。

タスクの内容がざっくりとしたものだったため、やらなきゃいけないことを整理する段階を踏まずに進めてから手戻りしてしまったのが結構痛かったです。

今は、全体を俯瞰してから作業に入ることを強く意識していてそれは本業へも生きているのでよかったなと思っています。

副業のメリット


長々と副業についての所感を書いてしまいましたが、ここから副業のメリットについて書きます。

  • 収入の柱が増えるので会社への依存度が薄れる
  • 他の会社で行われる取り組みの良い面と悪い面を垣間見ることができる
  • 自分の技術を俯瞰できる
  • スキルセットを伸ばせる
    • 実務である程度触っているものの、ガッツリ書いたことない言語も契約次第で触れる可能性が高い
    • 個人的には習うより慣れろだと思っているのでプレッシャーがかかった状態で学習した方が吸収は早いと思いました(中途半端な成果物を納品していいというわけではないですし個人差があります)
  • 確定申告について自分で行えるので、知識がつく
    • ドッグフーディングも行えた!(確定申告!)
  • 個人で開業ができるので、必要経費を落とせます(これは副次的なメリット)

www.pavlog.tokyo

以上のような感じでしょうか、多分もっと掘れば出てくるとは思います。

今までMySQLしか触ったことなかったんですが、PostgreSQLを使えました。

普段触れる機会のないミドルウェアについて、実務で触れたのは非常によい経験になりました。

副業のデメリット


良いことばっか羅列しましたが、これだけだと不公平なので副業のデメリットも書きます。

  • 稼働状況と本業の状況次第ではあるが、睡眠時間が減ることもある
  • 時間が足りなくなる(ジム週4を継続してたので、恒常的に時間が足りなかった)
  • インプットを行う時間が目減りする
    • ここはバランスを取ることが重要だと思うので、良い配分を見つけると良さそう
  • 良い椅子が欲しくなる
    • これはほぼ愚痴ですが、自宅での作業時間が増えると環境を整備したくなってお金がかかる

一番のデメリットは余暇がなくなることな気がします。ほかにデメリットはあまり感じませんでした。

記事を読んで理解できないという方もいると思うので、一回やってみたらいいです、死なないので…。

まとめ


個人的には副業をやってみてよかったです。

自分のスキルが外で通用することがわかったし、足りない部分へチャレンジもできることを知れました。

※経験が少ないスキルについては手を上げた方が良いですが、納品物の品質は落とさないように意識しましょう。

一つ注意点があるとすると自分に求められているものと、自分が求めているものが合致しない企業で働くと損をするので、 あまり安請負をしないように意識することが重要だと感じました。

また、得意な分野では強気になったほうが良いです。

今回半年以上の副業(と本業)を通して、自分の伸ばしたいスキルややってみたいことが少し明確になったので、もうちょっと没頭してみようと思います。

みなさんも無理のない範囲でぜひ、副業にチャレンジしてみてください!

よかったら是非、記事のシェアとツイッターのフォローをお願いします!

【美味】たった5分で鶏胸肉を驚くほど簡単に美味しく食べる方法【安価】

俺は真剣に鶏胸肉に向き合っている。

そして俺たちは筋トレをしている… 筋トレをしているとタンパク質が欲しくなる…

安価な鶏胸肉を食べたいが、美味しく食べるのが結構難しい。しかもとにかく飽きる。

この記事では、鶏胸肉を簡単に美味しく食べる方法を書いていく。

想定読者は、筋トレを始めたばっかで何を食べたらいいかわからない君や、美味しく鶏胸肉を食べる方法を探している君だ。

鳥が食べれない人や、そんなの知ってるよって人にはこの記事は無用の長物である。

・目次

事前準備(買っておくもの)

鶏胸肉を美味しく食べるためには、何はともあれ仕込みが必要だ。

仕込むために必要な道具と調味料は以下に記載する。大した金額でもないから揃えておこう。

全部買っても1000円前後だろう。これにコンソメを入れたり入れなかったりしている。

ずっと同じ味付けだと飽きるので、調味料(もちろん脂質が少ないもの)で自分なりにやると良い。

仕込み

  1. 鶏胸肉(1kg~)を購入してきて、火が通りやすいサイズに切る(身が厚い場合は、切れ込みを入れて均等に火が通るようにしておこう)
  2. ジップロックコンテナに切った鶏胸肉を入れる(あとで調味料と水を入れるので、余裕をもって)
  3. (必要であればコンソメ)、塩麹、重曹を鶏胸肉にかける
  4. 鶏胸肉がひたひたになるまで、ジップロックコンテナに水を入れる
  5. あとはジップロックコンテナに蓋をして冷蔵庫に入れておく(半日〜)

仕込みはこれだけで完了だ。実際にやることはルーチンなので慣れてしまえば5分ぐらいでできるだろう。

一番面倒くさいのは、まな板とキッチンを綺麗にすることだ。

調理

  • 食事の際にフライパンで火を通して食卓に並べる

適当に味付けして食べましょう。

コンソメがあればそのままでもいけるが、もし調味料で変化を出すのであればコチュジャンとかが良いと思います。

その際はコンソメを使わないでおきましょう。

鶏胸肉

安価でタンパク質量が豊富な鶏胸肉は希望だ。やすくてよかった。

まとめ

ここまで鶏胸肉の話をしておいて、最近は豚バラばっかり食べてます。

それは栄養価にカルニチンが含まれるからです。

  • Lカルニチン
  • アラキドン酸

詳しくは別の記事でまた紹介するが、カルニチンは脂肪燃焼には欠かせない成分である。

しかしカルニチン自体が脂肪燃焼を促進するわけではない。

またカルニチンは熱に弱いので注意が必要だ、豚しゃぶとかで食べよう。

L-カルニチンダイエットの効果をズバリ解説 | 生活スタイル向上labo,

そして豚肉はバラエティを出しやすいから飽き辛い。

1日鶏胸肉400gに豚バラ150gとってあとはプロテインとかにすると良いかもしれない。

次回は、買ったばかりの健康食品についてのレビューでも書こう… 語尾もよくわからんくなったし…

【Clipy】コピペを楽にするアプリを使おう【macOS】

f:id:paveg:20190215134058p:plain

こんにちは pavです。普段は会社でMacBookPro 15インチを使って仕事をしています。

また、家でも同様にMacBookPro 15インチを使ってブログを書いたり、副業(開発業務)をしてます。

本音は、13インチにしたいので早く32GBメモリが載ったMBP13インチが出て欲しいです。

PCで作業をする上で、コピペ(コピー・アンド・ペースト)することってたくさんあると思います。

コピー・アンド・ペースト: Copy and Paste)とは、文章データなどをコピー複写複製)し、そのコピーしたものを別の場所などへペースト転写貼付)するという操作を表すコンピュータ用語である。

出典: Wikipedia

複数のワードをコピーしないといけない時、いちいちタブを切り替えてコピーしてペーストして戻ってみたいな作業辛いですよね。

そういった悩みを解決するアプリケーションを今日はご紹介します。

・目次

Clipy - macOS スニペットアプリ

clipy-app.com

主な機能

  • プレーンテキストや画像といった複数の形式に対応したクリップボード拡張アプリです。
  • ショートカットキーで自由にメニューを呼び出すことができ、いつでもクリップボードの履歴を参照できます。
  • また、スニペットとして定型文を登録しておくことで、いつでも定型文をペーストできます。

Clipmenuをオープンソースとして公開していただき@naotaka氏に感謝いたします。このコードがなければリメイクという形で公開はありえませんでした。

現状機能が被ってしまっていますが、独自機能を追加してさらなる機能向上を目指していきます。本当にありがとうございました。

元はClipMenuというアプリケーションでしたが、このアプリをリメイクしたものが、Clipyになります

インストール方法

※インストールの可否は自己判断でお願いいたします

  1. Cilpy」のDownloadボタンを押して、拡張子「.dmg」のついたファイルをダウンロードします
  2. ダウンロードしたファイルをダブルクリックし、Applicationフォルダに移します
  3. 初回起動時に、開発元を信頼するかどうかの確認画面が表示されますが、開きます
  4. システム起動時の設定が出てきた場合は、PC起動時から立ち上がっていて欲しいので設定してください(後からでも設定できます)

f:id:paveg:20190215133230p:plain

f:id:paveg:20190215133306p:plain

カスタマイズする

設定画面です。

f:id:paveg:20190215133311p:plain

英語表記になっていますが…必要な設定を入れてください。

Launch on Login: ログイン時に起動

Input "⌘(command) + V" after menu item selection: メニュー項目選択後に "⌘ + V"を入力

Send crash report and error log: アプリがクラッシュしたらログを送信する(次回起動時に反映)

Clipboard History(履歴)より、アイテム数の設定ができます。

僕は最大のhistory sizeを100にしています。

f:id:paveg:20190215133336p:plain

Menuの項目についてはさまざまありますが、特に好みがない人はデフォルト設定で良いと思います。

ショートカットは、他のアプリと競合しないように設定してください。

f:id:paveg:20190215133402p:plain

僕はmainを「control + alt + ⌘ + ,」で開くようにしています。historyは,がVに変わります。

使い方

コピーした履歴がずらっと表示されます。

ペーストしたい内容が2個以上前だったりする場合はそこから選択して貼り付けます。

f:id:paveg:20190215133211g:plain

まとめ

Clipyを使えば、たくさんのアイテムを一気にコピーしてから一気にペースト!なんてことも可能です。

これを使うと書類作成業務や切り貼りの作業がものすごい効率よくなるので、ぜひ使って見てはいかがでしょうか。

clipy-app.com

公開された方の記事はこちら

クリップボード拡張Macアプリ「Clipy」を公開しました - Qiita

情報発信としてブログを書くこと

昨夜は完全にブログ書く余裕がなく寝てしまいました。

みなさんまとまった期間で、何かアウトプットしてますか?

2019/1/16に始めたブログも気が付けば26記事になっており、毎日書くと記事数が増えるのは早いなと感じています。

こんにちは、pavです。

これは完全に推測と偏見になるのですが、企業にお勤めの人は日報や週報などを書いている(いたことがある)のではないのかなあと思います。

新卒でSIerに入った当初は、日報を書くことに苦手意識がありました(≒アウトプットが苦手)。

そんな僕が、ブログを書いているのは下記のような問題意識があったからです。

  • 文章構成力や説明力に自信がなかったため、ライティングに時間をかけて取り組む必要性を感じた
  • インプットを増やしたかったので、アウトプットを目的にすることで目的を手段にしたかった
  • プレゼンスの向上によって伝えたい人に情報を伝えられるようになりたかった(セルフブランディング含)
  • マーケティングやSEOの勉強もしたい
  • あわよくばお小遣いが稼げれば良い

・目次

なぜはてなブログなのか

導入では、ブログを始めた理由を書きました。

そして今回ブログを始めるにあたって、「はてなブログ」というサービスを選択しました。

最近では note流行ってますね。

世の中には、たくさんのブログ(ポスティング)サービスがあります。

  • Amebaブログ
  • FC2ブログ
  • ライブドアブログ
  • Blogger
  • note
  • etc...

その中でなぜ今「はてなブログ」を選んだのかというと、管理画面が個人的に分かり易いと感じたことと

「株式会社はてな」の開発する "Mackerel" というサービスを会社で使っていて、サービス提供事業者として好きだったからです。

https://mackerel.io/ja/

実際に分かり易いと感じただけでなく、設定を行ってみた際も

スムースに作業が進められてブログを書き始めるまでに4時間もかからず終わった記憶があります。

一番悩んだのはスタイルの設定とお名前.comでのドメインのDNS設定だったはず。

また、単純にWordPressなどを選んで運用に時間をかけたくなかったのも大きな理由です。

3週間毎日投稿を続けてみて

想像以上にしんどいな、というのが率直な感想です。

僕は今、ソフトウェアエンジニア(ウェブエンジニア)として会社員をやる傍ら月に40時間副業を行なっています。

またその上にブログを毎日更新するということを約1ヶ月行いました。

その間、週3-4で行っていたジムの週間を維持することはとても難しく圧倒的に時間が足りないなと感じました。

やるべきことは他にもたくさんあります。

しかし時間配分を考えたり、優先度を決めたりすることが仕事じゃないと途端にできなくなったりします。

ここは要改善の認識があるので、ポモドーロなどを試し始めています。

差し込みが多すぎる仕事の性質があって本業ではあまりワークしなかったので、うまく組み込み方を考えていきたいです。 kakku22さんのブログは、調べていて出てくることが多く参考になるので、勉強の仕方とかも見習いたいと思っています。

kakakakakku.hatenablog.com

ポモドーロ管理のためのツールは「toggl」を使っていく予定です。

toggl.com

より良い記事や良質なアウトプットをすることを意識して密度を高めることと投稿量を減らすこと(投稿間隔を長めに取る)についてはすでに決めているので明日から週1-2本の投稿を意識してやっていこうと思っています。

ブログを始めて良かったこと

ブログを始めてよかったことは色々ありました。

まず、普段関わることのない人の反応を見ることができる点です。

また僕は人見知りの傾向があるので、初対面の人と話すのが苦手(話すきっかけ作りが得意ではない)なので

そういった点でも、見てくれている人だときっかけにし易いなと感じました。

入社してくれた方が、ブログを見てくれていて話しかけてもらえたりしました。

こんな弱小ブログをありがとうという気持ちと、やってて良かったと思う瞬間でした。

今後

先に書いた通り、投稿数を減らしつつゆるく続けていこうと思います。

7月15日までに記事数が50本ぐらいになっているのが目安です。

現在この記事を入れて27記事なので、あと23記事書く必要があります。週に1本以上書けば余裕でいけそうです。

また雑記ではあるものの、新しく習得する技術の発信を多めにしていこうと思います。

とはいえ、同僚に話を聞いていると検証のためのコードを書いたりすると途端に必要な時間が増えたりするケースもあるようです。

個人的には、ブログのためにコードを書くのはおそらく辛いと思うので副次的にブログがかけるような技術検証や学習を増やす方向に振ろうと考えています。

それでは、今後ともよろしくお願いします。

【決済サービス】メルペイのメリットについて考えてみる【戦国時代】

f:id:paveg:20190214012531p:plain

こんにちは、pavです。みなさま昨日は何の日かご存知ですか?

そう、メルペイが世にリリースされた日です。 リリースおめでとうございます。

jp.merpay.com

時は戦国時代…そう決済サービス(ペイ系サービス)が乱立し、ここ日本は戦場です。

https://tatsumushi.work/wp-content/uploads/2018/11/pay_1.jpg

出典: キャッシュレス決済サービスが乱立しすぎなので整理した │ T_times

そして、メルペイは(僕にとって)待望のサービスでした。決済サービス群雄割拠の中、強者が求められていました。 ちなみに僕は、波に乗れなかったタイプの人間なので1回目のPayPayのキャンペーンでは恩恵に預かれなかったクチです。

…なので、今日は本当にメルペイが雌雄を決する力を持っているかどうか、一歩引いて考えてみようと思います。

・目次

メルペイの特徴

  • 非接触決済サービス「iD」に対応
  • メルカリに蓄積された売上金を各種支払いに充当可能

スマートなプレスリリースをみて、いいなーと思った反面、「ん、これだけ?」という印象でした。

業務中ということもあったため、リリースされたねーと同僚と話しつつその場は一旦業務に戻りました。

業後Twitterを眺めていると、結構ポジティブな意見が多かったのでプロダクトが実際に良いものなのか考えたくなって筆を取っています(少なくとも使う使わないの判断はしたかった)。

特徴からメリットを享受できそうなユーザーについて考える

先ほどもあげた通り、メルペイの特徴は下記の二つです。 加えてもう一つ挙げるとするとすれば、メルカリアプリにビルトインされていることでしょう。 個人的に、ちょっとラインペイはアプリの移動が多くて辛いです。

  • 非接触決済サービス「iD」に対応
  • メルカリに蓄積された売上金を各種支払いに充当可能

非接触決済サービス

「ICカード(非接触型)を利用した決済」で、これはポストペイ(後払い方式)になります。

クレジットカードと同様に利用金額を後から請求するクレジット決済の一種である。

出典: Wikipedia

後ろ側にメルカリの売上金かメルカリカード(applepayに登録されるもの)、これが銀行へ口座振替を行うがいるというだけで大枠は「楽天Edy」やJR東日本が提供する「Suica」と変わらないと考えます。

じゃあ何が嬉しいの?

うーん、正直に言うと、メルペイで何が嬉しくなるのかはわからなかったです。

前提をメルカリユーザーに絞るのであれば、売上金を手数料なしで使えるという点がメリットになるとは思いますが、それ以外真新しさは感じられなかったです。

またキャッシュバックやその他還元などの、金銭的なメリットもあるわけではないので、

この決済サービス戦国時代とも言える今、敢えてメルペイを選択して使う人はいないんじゃないかなと感じました。

UI/UXは最高

ここまで酷評しましたが、サービスの導線や口座登録のさせ方などのUX(ユーザーエクスペリエンス)は本当に素晴らしかったです。 僕はデザイナーでもなんでもないので、初心者が何言ってんだと思うかもしれないですが感動しました。

f:id:paveg:20190214002027p:plainf:id:paveg:20190214002009p:plainf:id:paveg:20190214002037p:plain

実際に電子マネーの情報をiPhoneに追加していくところもめちゃくちゃスムースでした。 言われるがままに、登録を済ませると、iDの決済が行えるようになります。

f:id:paveg:20190214010340p:plainf:id:paveg:20190214010138p:plainf:id:paveg:20190214001958p:plain

そして最終的にapple pay側にmerpayのカードが追加されます。めっちゃ赤いですが、デザイン可愛い!

f:id:paveg:20190214002003j:plain

この後僕は、みずほ銀行の口座振替でボコボコにされるわけですが、それについてはメルカリは一切関係ないので置いておきます。

まとめ

メルカリユーザーにはメリットがあります。売上金を手数料なく・口座振替の手間なしで使えるという点です。 フラットな視点で見ると、それ以外のメリットは現在ありませんでした。

また保身のために言うと、メルカリというアプリは以前から使っていますし、その達成したい世界や技術的な取り組みはとてもすごいと共感するほどです。 個人的には、期待値が高すぎたというか、期待と現実との差分が埋められずに疑問符が多く浮かんだのだと思います。

いずれにしても僕はこれからのメルカリやメルペイに期待をしています。 今後より素晴らしいリリースが控えていると思うので、期待して待っていようと思います。

ぜひ、メルカリのお金で未来を変えていってほしいと思います。

改めて、リリースおめでとうございます。

jp.merpay.com

「Kyash Meetup #5 本音」に参加してきました

f:id:paveg:20190213003009p:plain

こんにちは pav です。普段は五反田でソフトウェアエンジニアをしています。

今日は 2019/02/12に行われた Kyash Meetup #5 に参加したので、それを記事にしようと思います。

Twitterでは、 #kyash_meetup というハッシュタグでツイートが残っています。

この記事で当日の雰囲気とかが伝わればいいなあ。

ちなみに次回のMeetupは 1.5~2ヶ月後?というツイートをみたので、この記事を読まれて行きたくなった方がいると良いなと思います。

僕はconpassの予約を見落としてて当日駆け込みだったので名札なかったです。次から気をつけます!

・目次

自己紹介

おまえは誰なんだと思う方もいらっしゃるので、軽く自己紹介をしておきます。

僕は五反田の某会計ソフトを作っている会社でソフトウエアエンジニアをしている pavです。

社内では yabu(ヤブ)という名で通っています。

実際に社内で使っている名前は思い入れがあるわけではないですが、短いので結構好きです。

会社では主に銀行のAPI連携周りや同期機能(スクレイピング)のPjMやプロジェクトオーナーをやっていることが多いです。もちろん開発もします。

Kyash Meetupに参加した理由

今回Kyash Meetupに行った理由は、大きく下記の2つでした。

  • 普段からKyashに触れる機会が多かったこと
  • 登壇されたEM(エンジニアリングマネージャ)の 山﨑 真 さんにお世話になっていたこともあり話を聞いてみたかった

あとは、記事書けるなーなんて下心もありました。

Kyashってどんな会社

株式会社 Kyash

「新しい価値移動のインフラを創る」

東京都港区南青山に拠点を置く、2015年1月23日に設立された Fintech企業です。

価値の移動を安価に簡単にすることを通じて、人々の挑戦や共感へより経済的・時間的な資本をかけられるようにしようというミッションを掲げています。

kyash.co

提供しているサービスは kyashプラットフォームで、前払式支払手段という決済の仕組みを提供しています。

実際に提供する決済手段やその仕組みについては、リンクする記事がとても詳しく書いてあります。

気になる方は読んでみてください。

Kyashの法的仕組みについて – IT・ネットに強い 弁護士 坂生

エンジニアリング

サービスはMicroServicesで構成されているそうです。

今のところ約10個ぐらいのマイクロサービスが存在しているとのこと。

技術スタックは下記に羅列しておきます。詳しくは Kyashの採用ページから見ると良いです。

主な技術スタック
  • PostgreSQL / AWS /CircleCI /Datadog /Docker

  • サーバーサイド: Golang

  • iOS: Swift

  • Android: Kotlin

LT概要

これから、資料がアップロードされるはずなのでそちらが確認できたら別途資料のリンクを貼ろうと思いますが、ざっくり概要を掻い摘んで書いておきます。 普通に人から聞いた話を記事にするのめちゃくちゃ難しいので勉強します。書きなぐった感じなので、フィードバックください。 チョコレート、待ってます。

小坂さん / 経理・労務

地方公務員のキャリアを捨ててKyashへ

  • 地方公務員で徴税吏員の経験(実際に年間500件以上の差し押さえをしていた)
  • 「仮想通貨をなんとか差し押さえたい」と思って調べ始める
  • 次の資産のあり方などに興味を持ち始めた
Kyashの目指す世界に面談(面接)で心酔して入社を決意

例えば「投げ銭」が気軽にできるとか、「お金の価値観の一新」がキーワードのようでした。

「新しい文化や世界ができるワクワク感」にひかれてFintech業界へきたとおっしゃっていて、すごい共感しました。

コーポレート(HR)所属で、悩み(?)や今後やりたいことについて話を聞くことができました。

山﨑 真さん / サーバーサイドエンジニア

2018年11月からkyashにjoinされたそうです(知ってる)。

Kyashに入って3ヶ月で感じた現状と課題

主にサービスの問題の話技術的な挑戦の話が聞けました。

事業優先度の高い開発がスケジュール的に詰まっていると、たびたび起こる問題ですが

  • ミドルウエアのバージョンアップ
  • リファクタリングしたい場所
  • サービスのメトリクスもっと取らないと
  • コンテナもっと活用したい

また、VISAと直結するシステムを内製開発しているため上記の技術的な課題とは別に、

  • 定期的なシステムエンハンスメント(アップデート)に追従すること
  • ドキュメントが英語でボリュームが多い

Kyashならではという問題を聞けました。

EMとしての話ではまだまだKyashはサイズの小さい組織なので(全体で30人 / エンジニア1桁人ぐらい) 注力するポイントが多くあり、マネージャとしていろいろなことに挑戦できそうとのことでした。

椎野 孝弘さん / CTO

お金を解放するプラットフォーム

kyashへの入社理由はこの2つで、価値の移動の実現について話を聞けました

  • 今実現している仕組みがすごい
  • 仕組みを生かしてプラットフォーム化をしたい

またKyash独自のネットワークなどの強みをもって、プラットフォームを作りたいというビジョン の印象が強いです。

技術的取り組み

  • 不正対策
  • セキュリティ
  • マイクロペイメント向けの技術の考察
  • etc…

勝てるの?

ここでは政府の後押し(ポイント還元や電子マネーでの給与振込の実現)に触れつつ、過熱している決済サービスについて話をしてもらいました。

いずれにしても、Kyashのコアコンピタンスである独自開発の強みとプラットフォームに向けての取り組みについて話をしていただき、いずれは勝負ではなく、共創というワードを聞けました。

鷹取 真一さん / CEO

創業当初のエモい話

うまくまとめる自信がないので…。 ただ、震災が起こった時に送金滞っている部分に課題を感じて、起業した話はめっちゃエモかったです。

僕はこう思ったっす

すごい出不精なので、普段ミートアップや勉強会にあまり足を運ぶことがないです。 なので今回エモい話や内部の話、技術的課題に今の問題、さらに今後の挑戦など、さまざまな視点と課題について聞けて新鮮でした。

また懇親会では、Fintech業界ならではの体験したことある話とか取り組みとかについて話せてうれしかったっす。 他意はないんですが、全体的に優しい人が多いなーという印象でした。あと雰囲気が柔らかい感じがしました。

あとお寿司と飲み物(お酒)が出て最高でした。 99.99フォーナインおいてあって少し怖いなーと思いました。

今、過熱しているマイクロペイメントのサービスの中でも普及して欲しいなと思うサービスの一つなので、応援しています。

kyash.co

(プラットフォーム構想は似ているなと思ったっす。)

japan.cnet.com

あとがき

普通に記事にするのがとても難しくて途中で挫折しそうになったので、読んで供養してください。

あとnoteでポエムも書いたので興味ある方はそちらも

note.mu