ゆるふわ技術日誌

ゆるくふわっと広く浅く。

AWSに触った #192

今日やったこと

AWS(S3,Route53,CloudFront)を使った。

週末のNode学園祭に持って行こうと思っていた名刺が来ました。(というか、入稿の翌日には届いてた)

そこに書いてあるURLに載っけるコンテンツを作ってたのですが飽きたので先に配信の部分をやってみました。

環境は表題にもあるようにAWSのS3(オブジェクトストレージ)とCloudFront(CDN)とRoute 53(DNS)を使ってやってみました。

サイトはこちら

工事チュウ…

工事中画面だと阿部寛サイトより速かったです。

いろいろとハマりどころとかあって試行錯誤したのでその辺の話は12月4日、アドベントカレンダーのネタとして書こうと思います。それまでに少しは詳しくなっておけると良さげかな?

田胡研 Advent Calendar 2017 - Adventar

雑談

なんかダメな1日だったよ…………。

RubyとRailsときどきGA。 #191

今日やったこと

RubyRails

最近Railsがたのしい…。今更感が強すぎる。

before_actionの話

今日はbefore_actionを使ってとある修正をしたりしていました。

before_actionの中でどのメソッドから呼ばれたかを取りたいみたいな事態が発生したのですが、action_nameで取ることができるらしいです。Rubyすごい。

ヒアドキュメントでインデントを取り除く

ヒアドキュメント、Ruby書いてるとたまに使ったりしますよね。

str = <<EOS
hoge
fuga
piyo
EOS

的な。↑の状態だと特に何も問題はないのですが、メソッドの途中に使ったりするとEOSとEOSの間だけインデントを崩さないと先頭にスペースやらタブやらが入った文字列がstrに代入されてしまいます。

def hogeFunc
  str = <<EOS
hoge
fuga
piyo
EOS
  puts str

的な感じに。

コレだと気持ち悪いし、なんとかならんもんかと思っていたらRuby2.3以降にはこんな記法も有るようです。

str = <<~EOS
hoge
fuga
piyo
EOS

これだと、EOSとEOSの間でインデントを入れても取り除いた結果をstrに代入してくれて幸せになれます。

Rubocop with Railsのときは忘れずにTargetRailsVersionを指定しよう

Railsモードをオンにした状態のRubocop先生はプロジェクトで使っているRailsのバージョンを指定してあげないと何も考えずにRails5でしか使用できないクラスとかぶち込んでくるので気をつけようね。という話。

migrateファイルを書き換えた死んだ

Lintエラー対応してて何も考えないでmigrateファイルを書き換えたらpending migrateになって死んだ(ノω・)テヘ

速攻でgit revertしました。

そういえばgit revert--no-commitとか付けてあげるとステージングするところで踏みとどまってくれます。良い。

GoogleAnalyticsのカスタムキャンペーンに触った

GAすごいっすよね。カスタムキャンペーンってのがあってだね(唐突

support.google.com

すべては説明するまでもなくココに書いてるんだけど、メールからの流入とかそういうのをGA上に認識させてあげる仕組みらしい。

GA側は何も準備は要らなくてクエリ文字列に特定の値をぶち込んであげると勝手に集計してくれるスグレモノ。ごいす。

雑談

珍しくブログが捗ったのでなんかつらつら書いてしまった。

そんなことより体調が悪くて週末Node学園祭が心配です。

あと、Mac買い替えたい。

API Blueprintやってみた #190

今日やったこと

API Blueprintやってみた

先日やってみると言ってたやつです。

API Blueprint | API Blueprint

Markdownっぽい記法でAPIドキュメントが作れるというやつ。

ごにょごにょやると最終的にこんな見た目のものが出来上がります。

f:id:uutarou:20171121230931p:plain

記法は

dev.classmethod.jp

こちらの記事と、

Examples | API Blueprint

公式のExampleがわかりやすいです。

MSONという記法をレスポンスを書いてやることでモックサーバーを立ち上げたりすることもできるらしいのでそのうちトライしてみたいと思います。

雑談

なんで1年とか2年のときに技術力蓄えてこなかったかなぁとちょっとつらい気持ち。

JavaのEnumすげーじゃんという話 #189

今日やったこと

Java書いてた。Enumすごい。

数日前にも書いた「JavaでBASIC(風な言語の)インタプリタを作る」という謎な課題の提出期限が迫ってきたのでちまちま作業してました。

その中で列挙型に正規表現を突っ込んでマッチするか、みたいなことをやったのですが思った以上にキレイに書けて嬉しくなったので書きます。

Enum で振る舞う - Qiita

なお言いたいことは大体ここに書いている。

要は列挙型にメソッド持たせられるのすごいよねという話です。

こんなコードを書いた。

package newlang3;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public enum LexicalPattern {
    NAME("^[a-zA-Z]"),
    SYMBOL("^[=<>+-/,\\(\\)\\*]"),
    NUMBER("^\\d");

    private final String regexp;

    LexicalPattern(final String regexp) {
        this.regexp = regexp;
    }

    private Pattern toPattern() {
        return Pattern.compile(regexp);
    }

    private boolean isMatch(String str) {
        Matcher matcher = toPattern().matcher(str);
        return matcher.matches();
    }

    public boolean isMatch(char c) {
        return isMatch(String.valueOf(c));
    }

    public static LexicalPattern isMatchAny(char c) {
        for (LexicalPattern pattern : values()) {
            if (pattern.isMatch(c)) {
                return pattern;
            }
        }
        return null;
    }
}

最後のメソッド、isMatchAny()は列挙型にある正規表現のいずれかにマッチすればそのオブジェクトを返すということをしたいのですが、こんなにスッキリ書けるとは。

ポイントはvalues()を使うことで列挙型のすべての要素を取ってくることができる点でしょうか。嬉しみ。

………なんて喜んでますが僕のJava力の低さが露呈しましたね。悲しい。

雑談

JavaはそこそこにJSを書きたい……欲を言えばTSを………

APIドキュメンテーションツールを調べる #188

今日やったこと

APIドキュメンテーションツールを調べる

世の中にはそういうものがあってだね。

「このAPIはこういうパラメーター追加して叩いてね」とか「こういうレスポンスかえるよ」とかをわかりやすくみれたり、ボタン一つでためしにAPIコールしたりできる便利ツールです。

SwaggerというAPIドキュメンテーションツールがあって、研究室の先輩が使ってたのでそれ使うかーと思ったのですがほかにもいろいろあるらしいので調べてみた。

API Blueprint | API Blueprint

たとえばこれ。API Blueprintというらしい。サイトがカッコいい(小並感)

とりあえずこれ使ってみようかな感があります。

ちょっと書き方特殊だけど覚えるほどでもなさそう。

雑談

なんもコード書いてない日ツライさん。

RubocopでRubyの知識をつける #187

今日やったこと

Rubocopに初めてチャレンジ・Rubyの知識を付ける

RubocopとはRubyのLintツールです。

github.com

ありがちなインデントがどうこうとかダブルクオーテーションとシングルクォーテーションの揺れとかの警告はもちろん、結構賢くてRubyの思想に反する書き方をしたりすると警告をくれるというなんともおせっかいなよくできたツールです。

標準の状態だとあまりにも厳しすぎるので、設定ファイルを書くのが普通の使い方です。自分でイチから書いてもいいのですが、 rubocop/config at master · bbatsov/rubocop · GitHub にあるように異様に設定項目が多いので今回は先人の設定ファイルを頂いてきました。

github.com

こちら。configディレクトリの下にymlがあります。日本語で何故そのような設定になっているかが書いてあります。コレを読むだけでも結構勉強になりそうな感じ。

設定ファイルを設置したらrubocopコマンドを叩くと(bundler使ってる人はbundle exec rubocopね)カレントディレクト以下のファイルを調べて警告を吐いてくれます。

もちろん全部手作業で修正してもいいのですが、rubocop -aとしてやると(aはauto-correctの略)自動で修正できるところは勝手に直してくれます。

このコマンドを実行してGitの差分を見ながら設定を自分流に修正するのがオススメです。

あとは残ったエラーを修正すると。すごい勉強になるので良いです。いろいろ参考になったサイトたちのリンクを貼っておく。

techracho.bpsinc.jp

qiita.com

techracho.bpsinc.jp

www.techscore.com

雑談

もっとちゃんと記事書きたいけど途中で力尽きてしまった。

とにかくRubocopオススメです。3000個のLintErrorと戦うのたのしいよ。

skywayをお触りしました #186

今日やったこと

Skywayに触りました

知ってますかSkyway。

SkyWay - Enterprise Cloud WebRTC Platform

WebRTCをかんたんに実装できるプラットフォーム的なものです。NTTコミュニケーションズが提供してます。

ちょっと講義で作ってるウェブアプリに通話機能をつける必要が出て来てしまったので使いました。

単純に通話したいだけであれば、

JavaScript SDK チュートリアル - SkyWay - Enterprise Cloud WebRTC Platform

このチュートリアルてきとうにこなすとそれっぽく動きます。

無料で使えるので是非是非。

名刺の件

昨日書いた名刺の件、データに異常なかったようで印刷に入ったっぽい。wktk

雑談

イルミネーションを見に相模湖に行きました。

寒い。