開発効率がグンとアップする!PhpStormの便利ショートカット20選

PHPerKaigiの山本さんの発表を聞いて、開発するときはなるべくショートカットを使うように意識しています!

そこで今回はPhpStormでよく使っている便利ショートカットをご紹介します!

ナビゲーション

やりたいこと ショートカット
クラス名で検索 Cmd + O
ファイル名で検索 Shift + Cmd + O
ファイル内検索 Shift + Cmd + F
最近開いたファイル Cmd + E
最近編集した箇所 Shift + Cmd + E
指定行にジャンプ Cmd + L
定義箇所にジャンプ Cmd + B
定義利用箇所を検索 Opt + Cmd + F7
ファンクションが使われてるか確認して削除 Cmd + Fn + Delete
ファイル内の定義一覧 Cmd + F12

コード

やりたいこと ショートカット
セミコロンをつける Shift + Cmd + Enter
リネーム Shift + F6
コードのフォーマット Opt + Cmd + L
ライブテンプレートの挿入 Cmd + J
行の複製 Cmd + D
行の削除 Cmd + Delete

Git

やりたいこと ショートカット
Pull Cmd + T
Commit Cmd + K
Push Shift +Cmd + K
Revert Opt + Cmd + Z


その他にも山本さんの発表ではPhpStormの便利な使い方を紹介されていましたのでご覧ください↓


ショートカットを使いこなすのに最初は時間がかかりますが、「習うより慣れろ」ってことで日々使えばすぐに慣れますよ〜
マウスだと深い構造のリンクをクリックするのに手間だったのですが、ショートカットを覚えたらかなり楽になりました!
他にも便利なショートカット知ってるぞ!という方は是非教えてください!

AWS認定ポータルのアカウントを移行する

所属が変わるとAWSの認定証の移行が必要になりますよね。
認定証を移行するには、AWSの認定ポータルのアカウントを変更しなければいけません。

認定ポータルへのログイン方法はAPNパートナーとそれ以外では異なります。
本記事はAPNアカウントから個人アカウントへの移行方法をまとめています。

個人アカウントの作成

下記のURLから新規でAmazon.co.jpの個人アカウントを作成します。
https://www.aws.training/Account/LogOnOptions

Sign In」をクリックします。
(「サインイン」もありますが、「Sign In」との違いはちょっとわからないです・・)
f:id:aym413:20190411220857p:plain:w600

Amazonアカウントを作成」をクリックします。
f:id:aym413:20190411221203p:plain:w400

必要な項目を入力し、「Amazonアカウントを作成」をクリックします。
f:id:aym413:20190411221601p:plain:w400

入力したメールアドレスに、アカウントを認証するためのコードが送られてきますので、入力してください。

これで、Amazon.co.jpの個人アカウントが作成できました!

AWSレーニングおよび認定チームへ問い合わせ

下記URLからAWSのトレーニング・認定チームへ問い合わせを行います。
https://aws.amazon.com/jp/contact-us/aws-training/

必要な項目を入力し、「送信」をクリックします。
記載する内容は英語で書く必要がありますので注意してください!
f:id:aym413:20190411224200p:plain:w600

問い合わせの詳細には、「APNアカウントから個人アカウントに移行したい。それぞれのログインアドレスは○○です。」と記載すれば大丈夫です!以下にサンプルを載せたので参考にしてください。

【問い合わせ内容のサンプル】
Google翻訳で作ったので、変な英語かもしれないですが、一応これで対応してくれました

I want to migrate my AWS certificate.
Since I used to be an APN partner, I used to log in from the APN portal. The APN account is <APNのアカウント番号>. The login address is <旧アカウントのログインアドレス>.
Since I am not an APN partner, I have created a new personal account. The personal account login address is <新アカウントのログインアドレス>.
Please move from APN account to personal account.

問い合わせ後は、1〜2日ほどで連絡がきます。


問い合わせの窓口が上記以外にもあって、アカウント移行するのにちょっと時間がかかったので備忘録として残しておきました。
今回はAPNアカウントから個人アカウントへの移行方法についてまとめましたが、個人アカウントからAPNアカウントへの移行をする場合もあるかと思います。その場合は、まずAWSのトレーニング・認定チーム(https://aws.amazon.com/jp/contact-us/aws-training/)へ問い合わせを行ってみてください。

【Laravel】データベースにテーブルを作成する

前回まででLaravelの初期画面表示とデータベースへの接続確認ができたので、今回はデータベースにテーブルを作成します!

まだLaradockでのセットアップが終わっていない方は前回のこちらの記事を参考にしてください。
coxcox.hatenablog.com

マイグレーションファイルを作成する

マイグレーションファイルの作成はworkspaceコンテナ上で行います。

$ cd laradock
$ docker-compose exec --user=laradock workspace bash

データベースを管理するためのマイグレーションファイルを作成します。

/var/www$ php artisan make:migration <マイグレーションファイル名> --create=<テーブル名>

実際のコマンドはこんな感じです。

/var/www$ php artisan make:migration create_tasks_table --create=tasks

コマンド実行後、Laravelプロジェクト内の「database/migaration」配下にマイグレーションファイルが作成されます。

ファイルを開くとup()down() 2つのメソッドがあります。

  • up() ・・新しいテーブル、カラム、インデックスをデータベースに追加します
  • down() ・・upメソッドが行った操作を元に戻します

今回はtitledeadlineカラムを追加してみます。

database/migaration/xxx_create_tasks_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTasksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title'); // 追加
            $table->date('deadline'); // 追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}

データベースへの接続設定を変更する

別ターミナルを開いて、Laravelプロジェクト内の.envファイルを書き換えます。

$ cd <Laravelプロジェクト>
$ vim .env
DB_CONNECTION=mysql
DB_HOST=mysql // Laradockのmysqlを指定する
DB_PORT=3306
DB_DATABASE=laravel // Laradockの.envファイルで設定したデータベースを指定する
DB_USERNAME=root // Laradockの.envファイルで設定したユーザー名を指定する
DB_PASSWORD=root // Laradockの.envファイルで設定したパスワードを指定する

マイグレーションファイルを実行する

最後にworkspaceコンテナ上でマイグレーションファイルを実行してテーブルを作成します。

/var/www$ php artisan migrate
Migration table created successfully.

データベースに接続してtasksテーブルが作成されているのが確認できました! f:id:aym413:20190620152901p:plain


ここまでで環境の準備ができたので、次はいよいよLaravelの勉強で簡単なタスク管理を行うWebアプリを作ってみようと思います!

【Google Apps Script】claspを使ってローカル環境で開発する

Google Apps Script(GAS)のエディタで直接スクリプトを書くことももちろんできますが、インデントや補完がうまくできないので辛いです。。
そこで、ローカル環境で開発を行う方法について調べてみました!

Node.jsのインストール

Node.js が必要になります。インストールはこちらから↓

nodejs.org

claspのインストール

Google公式のCLIツールである「clasp」をインストールします。

$ sudo npm install @google/clasp -g

一般ユーザーで実行するとエラーになるので注意!

npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

Googleアカウントへのアクセス許可

$ clasp login

コマンドを実行すると、ブラウザで認証確認画面が表示されるので「許可」してください。

ログインに成功すると、.clasprc.jsonというファイルが生成されます。

Authorization successful.

Default credentials saved to: ~/.clasprc.json (/xxxx/.clasprc.json).

ちなみにログアウトを行うと上記ファイルが削除されます。

$ clasp logout

Google Apps Script APIを許可する

G Suite Developer Hub(https://script.google.com/home/usersettings)の「設定」メニューからGoogle Apps Script APIを「オン」にします。

f:id:aym413:20190404233417p:plain:w600

オンにしないとpushした時にエラーになるので注意!

User has not enabled the Apps Script API. Enable it by visiting https://script.google.com/home/usersettings then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

GASの作成

今回はGASを作成するときの3つのパターンについて記載しています。

  1. スプレッドシートから新規で作成する場合
  2. 既にあるGASファイルを使用する場合
  3. スプレッドシートは用意していて、GASファイルをこれから作成する場合

スプレッドシートから新規で作成する場合

プロジェクト名を指定して、スプレッドシートとGASファイルを作成します。

ここで指定する<プロジェクト名>はスプレッドシートGASのプロジェクト名が同一になります。

$ cd <任意の作業ディレクトリ>
$ clasp create <プロジェクト名> --type sheets
Created new Google Sheet: https://drive.google.com/open?id=xxxxxx → スプレッドシートのURL
Created new Google Sheets Add-on script: https://script.google.com/d/xxxxx/edit → GASのURL
Cloned 1 file.
└─ appsscript.json

既にあるGASファイルを使用する場合

スクリプトエディタメニューの「ファイル」>「プロジェクトのプロパティ」>「情報」タブ内に記載されているスクリプトIDをコピーします。
f:id:aym413:20190404232626p:plain:w500

スクリプトIDを指定してスクリプトファイルをクローンしてきます。

$ cd <任意の作業ディレクトリ>
$ clasp clone <スクリプトID>
Cloned 2 files.
└─ appsscript.json
└─ test.js

スプレッドシートは用意していて、GASファイルをこれから作成する場合

スプレッドシート開いて、URL内のIDをコピーします。

https://docs.google.com/spreadsheets/d/<スプレッドシートのID>/edit#gid=0


スプレッドシートを指定して、GASファイルを作成します。
clasp create を実行したら Clone which script? と聞かれるので standalone を選択して Enterキー を押下します。
ここで sheets を選択してしまうと、新規でスプレッドシートが作成されてしまうので注意!

$ cd <任意の作業ディレクトリ>
$ clasp create --parentId <スプレッドシートのID> --title <プロジェクト名>
? Clone which script? (Use arrow keys)
❯ standalone 
  docs 
  sheets 
  slides 
  forms 
  webapp 
  api 

--titleは指定しなくても実行はできますが、指定しなかった場合は、作業ディレクトリがプロジェクト名になります。


上記のclasp createclasp clone を実行すると、.clasp.jsonというファイルが生成されるのですが、
もし、下記のエラーが発生した場合は.clasp.jsonがホームディレクトリ内で既に作成されてしまっていますので削除してください。(私自身これにハマりました・・)

Nested clasp projects are not supported.

GASファイルをpushする

最後にローカルで開発したGASファイルをpushします。

$ cd <任意の作業ディレクトリ>
$ clasp push
└─ appsscript.json
└─ test.js
Pushed 2 files.

claspは git コマンドのような感じで使えるのでとっても扱いやすいです!
今回はスプレッドシートでのGASの使い方をご紹介しましたが、このほかにもGoogleドキュメントやプレゼンテーションでも利用できるようなので、幅広い使い方ができそうです!

Laradock(Docker)でLaravelの開発環境を構築する

先日ローカル環境にLaravelを構築したのですが・・
coxcox.hatenablog.com

今後MySQLも必要になるし、必要なものを全部ローカルで準備するのも大変だなぁと思いDocker上にLaravelの開発環境を作ってみました!

今回はLaradockというLaravelの開発に必要な環境をDocker上で動かせるものを使いました。

laradock.io

Laradockのクローン

プロジェクト用のディレクトリを作成し、その配下にLaradockをクローンします。

$ mkdir <プロジェクトフォルダ>
$ cd <プロジェクトフォルダ>
$ git clone https://github.com/Laradock/laradock.git

MySQLの環境設定変更

laradockディレクトリにある env-example をコピーして .env ファイルを作成します。

$ cd laradock
$ cp env-example .env

.env ファイルを開いて MYSQL の設定を任意の値に変更します。

$ vim .env

215行目あたり
### MYSQL #################################################

MYSQL_VERSION=5.7
MYSQL_DATABASE=laravel
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root

コンテナの起動

nginx / mysql / workspace のコンテナを起動します。
(初回起動は時間がかかるので気長にお待ちください・・)

$ docker-compose up -d nginx mysql workspace
Creating laradock_docker-in-docker_1 ... done
Creating laradock_mysql_1            ... done
Creating laradock_workspace_1        ... done
Creating laradock_php-fpm_1          ... done
Creating laradock_nginx_1            ... done

ここでブラウザから「http://localhost」にアクセスしてみます。
この時点では404が出ますが問題ありません!次の手順に進みましょう〜
f:id:aym413:20190327235715p:plain:w550

Laravelプロジェクトの作成

Laravelプロジェクトはworkspaceコンテナに作成します。

workspaceコンテナにログインします。

$ docker-compose exec --user=laradock workspace bash
/var/www$ 

workspaceコンテナ上でLaravelプロジェクトを作成します。

/var/www$ composer create-project --prefer-dist laravel/laravel <Laravelプロジェクト名>

workspaceコンテナからログアウトします。

/var/www$ exit

Laravelプロジェクトを作成すると以下のようなディレクトリ構成になったと思います。

<プロジェクトフォルダ>
 ├  laradock
 └ <Laravelプロジェクト>

アプリケーションパスの変更

laradockからアプリケーションフォルダ(workspaceコンテナで作成したLaravelプロジェクト)が参照できるように.env ファイルを修正します。

$ vim .env

5行目あたり
### Paths #################################################
APP_CODE_PATH_HOST=../<プロジェクト名>

コンテナの再起動

.envファイルを修正した際にはコンテナの再起動が必要になります。

$ docker-compose up -d nginx mysql workspace

再度ブラウザから「http://localhost」にアクセスしてみます。
f:id:aym413:20190328002341p:plain:w550

Laravelの初期画面が表示されればOKです!

DBへの接続確認

mysqlコンテナも起動したのでMySQL Workbenchから接続確認をしてみます。
.envファイルのMySQLで設定した内容を入力した後「Test Connection」をクリックします。
以下のように Successfully made the MySQL connection となればOKです!
f:id:aym413:20190328003210p:plain:w300


今回Laradockを使ってDocker上にLaravelを構築してみましたが、とっても簡単に開発環境を作ることができました!
Laravelの開発環境を用意したいという方は是非このLaradock使ってみてはどうですか?

【イベントレポート】 JAWS-UG 横浜支部 #15 に参加してきました!

3/20(水)に行われた JAWS-UG 横浜支部 #15 のイベントレポートです!

今回はMedia-JAWSとのコラボ企画!

その名も・・「Media-JAWS #0 〜メディア✕AWSスペシャル〜
ということで、会場も放送局のようなセッティングに!
f:id:aym413:20190321175651j:plain:w500  

Media-JAWSというだけあって本格的なライブ配信も行われましたよ〜
f:id:aym413:20190321175854j:plain:w500

そもそもMedia-JAWSって??

Media-JAWSは、メディアの世界でAWSをどのようにして活用しているか情報を共有していくためのコミュニティとして設立予定です。
今回は設立前のプレイベントとして、メディア✕AWSの内容で勉強会が開催されました!

AWSを利用したライブ配信構成まとめ:アイレット 土田さん

社会人4年目+インフラエンジニア=土田さんからは事例を交えながらライブ配信の構成についてお話してもらいました。

  • ライブ配信を行う際の構成としては3つ
  • AWSベーシック構成(EC2, CloudFront, S3など)→ そこまで要件に厳しくないお客さん向け
  • AWS+有償製品(Wowzaなど)→ いろんなデバイスで配信したいなどの要件があるお客さん向け
  • AWS Media Services フルマネージドサービス → 未実装の機能はある(自動フェイルオーバーの機能がない)が案件の引き合いは増えている

さっぽろ雪まつり配信におけるMediaLive失敗談:北海道テレビ 三浦さん

なんと今日のために北海道から駆けつけてくれた三浦さん。
さっぽろ雪まつりを5G 4Kでライブ配信したときの失敗談についてお話してくださいました。

  • MediaLiveでは4K配信できず。。jstreamを使って実現した。
  • jstreamを使って配信をすることに決まったあと、MediaLiveのチャンネルを削除するのを忘れてとんでもなき請求が来てしまった・・
  • ライブ配信を行うのに雪をショベルカーで掘って、パイプの中に配線を通している映像には驚きました!

Media ServicesとAIを利用した字幕付きライブ配信テレビ東京 段野さん

今回のMedia/JAWSの発起人である段野さんから字幕付き配信のお話をしてもらいました。

  • リアルタイム字幕には「Closed Caption」と「リアルタイム変換」の2種類がある
  • Closed Caption:特定のインターバルごとにまとめて字幕を表示する
  • リアルタイム変換:字幕生成したタイミングで随時表示する
  • 目指すカタチは、Closed Captionで表示し、クラウドで処理を完結させ、字幕変換はAIで!
  • 字幕付き配信のデモでは、少し誤訳があるものの、ほぼしゃべってる内容に差がありませんでした!日産のゴーン社長が「5分」と訳されるなど、誤訳も面白く、会場は笑いに包まれていました。

www.slideshare.net

あなたの知らない怖い話 ~メディアコンテンツに迫る魔の手~:IMAGICA Lab. 蜂須賀さん

身の毛もよだつお話をしてくださったのは蜂須賀さん。
メディアコンテンツのセキュリティに関するお話をしてくださいました。

  • S3に置くファイル名はファイルの中身が特定されないものにする
  • 配信を行う際は、CloudFrontで署名付きURLで
  • 画面録画に対する対策としては透かしを入れるなどして漏えいしたユーザーを特定できるようにする
  • メディア限定のセキュリティというわけではなく、IT・AWSに関わっている人ならやってしまいがちなことが多く耳の痛い話ばかりでした、、

www.slideshare.net

 

DXGWは海外映像配信で使えるのか?MediaConnectの事例を交えながら:NTT東日本 里見さん

里見さんからは通信キャリアの方ならではの海外にコンテンツ配信するときのお話をしてくださいました。

  • ダイレクトコネクトGW(直接海外へ配信する)よりも、VPC Peeringで海外に配信したほうが安定している
  • MediaConnectの検証がまだ未完了とのことで次回のMedia-JAWSでの発表に期待!
  • ダイレクトコネクトを使った検証は通信キャリアの方ならではのお話で大変貴重でした

もっと詳しく聞きたい!という方はこちら

www.youtube.com

Togetterはこちら

togetter.com


参加していただいた方も半分くらいはメディア業界で働いているというJAWS-UGでも珍しい顔ぶれとなりました。
次回のMedia-JAWSは4月下旬を予定しているそうなので、興味のあるかたは是非ご参加ください!

【Google Apps Script】 資格試験の練習問題をSlackに投稿するBotを作ってみた!

弊社の技術部でAWSのソリューションアーキテクト-アソシエイト全員合格を目指そう!ということで、毎日試験の練習問題をSlackに投稿するBotを作ってみました!

完成イメージはこんな感じです↓ f:id:aym413:20190317222212p:plain

今回、試験問題はGoogleスプレッドシートに記載して、Slackに試験問題を投稿するスクリプトGoogle Apps Scriptで書いてみました。

Google Apps Script(GAS)とは?

Googleが提供しているスクリプト作成・実行ができるサービスです。
言語のベースはJavaScriptです。

試験問題の作成

試験問題は下記のような形でスプレッドシートに記載していきます。
f:id:aym413:20190320125357p:plain

A列 B列 C列〜
日付 問題 選択肢

GAS上でスクリプト作成

「ツール」>「スクリプトエディタ」を開きます。

f:id:aym413:20190317232351p:plain:w300

エディタに下記のコードを貼り付けて保存します。
任意の値の箇所は環境に合わせて変更してください!

いざ、実行!

メニューから関数を選択して「実行」をクリックします。

f:id:aym413:20190318233846p:plain:w300

実行するとSlackに投稿されました!

問題文にリアクションをつけてしまうと、自分で解答を考える前にみんながどれを選んでいるのかわかってしまう・・ということで、問題文を投稿したスレッドで解答を選べるようにしました!
f:id:aym413:20190317222836p:plain:w300

日次でSlackへ自動投稿

最後にSlackへ自動投稿するためのトリガーを作成していきます。
トリガー作成もブラウザから設定できるので難しくありません!

メニューから「現在のプロジェクトのトリガー」をクリックします。
f:id:aym413:20190318234030p:plain

別画面が開くので、画面右下の「トリガーを追加」をクリックします。
f:id:aym413:20190320121344p:plain

トリガーの設定をしていきます。
今回は毎日Slackへ投稿したいので下記のような設定をしました。
f:id:aym413:20190320121540p:plain:w350

「保存」をクリックすると、一覧画面に表示されます。
f:id:aym413:20190320122102p:plain

これで設定は完了しました!
とっても簡単ですね!!

ハマったところ

スプレッドシートから値を取得してSlackに投稿すると文字化けする

スプレッドシートから取得した値を表示しようとするとこんな表示になることがあります。
f:id:aym413:20190320113414p:plain:w300

そんな時は、下記のようにやるとちゃんと文字列として表示されるようになります。

<変数名>.toString().replace(/,/g , "\n");

また今回は、上記のようにやらなくても文字列と変数を結合することで文字化けせずに表示できました。

57行目   var message = '*問題*' + '\n\n' + questions + '\n\n' + '*選択肢*' + '\n\n';


Slackの数字絵文字は英語表記でないと文字列になる

通常、Slackの絵文字で :1: と入力するとf:id:aym413:20190320125247p:plain:w20と出ますが、スクリプト内で「:1:」を生成しても、絵文字にしてくれません・・。

f:id:aym413:20190320130516p:plain:w300

仕方がないので今回は数字の英語配列を作成することで対応しました。

2行目   // 選択肢のリアクション
3行目   var reaction = ['one', 'two', 'three', 'four', 'five', 'six'];

何かいい方法があれば是非コメントください!!


GASを今回初めて使ってみましたが、簡単に作成することができました。
これを応用してWeb APIで取得した値をスプレッドシートに書き込んで、集計するなんてことも簡単にできそうですね!