tanikoのぶろぐ

Saori v2.2のリリース

v2.2では主にコマンドの追加をしました.

コマンドの追加

deploy

deployはデプロイを簡単にするためのものです. git add, commit, pushをまとめてやってくれるといった簡単なものです.

php saori deploy (:commit_message)

これで動作します. :commit_messageが存在しなければdate('YmdHi')が入ります.

theme

themeは存在するテーマ一覧の取得と, テーマの設定ファイルの確認に使います

php saori theme
## 以下が表示される
Theme list
sample, saori

php saori theme saori
## 以下が表示される
saori/theme.json
{
    "noapp":5,
    "color" : {
        "header" : "#000033",
        "title" : "#EEEEEE",
        "body"      : "#E9E9E9",
        "article"   : "#FFF1CF",
        "main" : "white",
        "side" : "white"
    },
    "date-format" : "Y-m-d"
}

内部的な話

現在置換え中ですが, PHPの配列からIlluminate\Support\Collectionに変更中です. Laravelで使われているあれです. まだ書き換えられていないところもあるのですが, 徐々に書き換えていきたいと思います.
あと, テーマ作成の面で言うとcss.twigを使えるようにした. これはcss/name.css.twigをcss/name.cssに書き換えると言うもの. theme/saoriではheader, bodyなどの背景色をカスタマイズできるようにするために使用しています.

/* theme/saori/css/article.css.twig */
article {
    background: {{maker.color('article')}};
    margin-bottom: 50px;
    padding: 5px 10px 5px 10px;
}

Slackのフレームワーク(?)を作った

RiccaというSlackのフレームワークのようなものをPHPで作りました. できることは少ないですが, なにかメッセージを投げるとそれに一致したコマンドが動いて, Twitterにつぶやかれたり, Slackに文字を返したりするという単純なものです.
例としては「tw こんにちは」とメッセージを送るとTwitterに「こんにちは」とつぶやかれるとか「pid」でBotの動いているプロセスIDがslackに返ってくとかです.

コマンドについて

コマンドの作り方

実際にコードをみてもらうとわかりやすいと思うのでtwコマンドのコードを載せます. configure()で設定をしてexecute()に実際の処理を書くといったものです.

<?php
namespace Hrgruri\Ricca\Command;
class Tweet extends \Hrgruri\Ricca\Command
{
    public function configure()
    {
        $this->setName('tw')
            ->setChannel('general');
    }
    public function execute(\Hrgruri\Ricca\Request $req, \Hrgruri\Ricca\Response $res)
    {
        return $res->withTweet($req->getText())->withText('tweeted');
    }
}

botにコマンドを追加する方法

上記のようなコードを書くだけで簡単にコマンドを作成することができます. 自分で新たにコマンドを作成したら使用できるようにコマンドを追加します. 下のコードはbotを動かすためのコードです. add()で作ったコマンドを登録していけばいいだけです.

<?php
require 'vendor/autoload.php';
$app = new Hrgruri\Ricca\Application(__DIR__.'/data', 'general');
$app->add(new Hrgruri\Ricca\Command\Tweet);
$app->run();

私のbotのリポジトリ hrgruri/slack_bot

saoriのv2.1リリース

saori v2.1.0をリリースしました. v2.0の話をしていなかったのでここでまとめて話します.

create-projectからインストール

composer create-project hrgruri/saori-skeleton blogでインストールができるようになりました. これにより

mkdir blog
cd blog
composer require hrgruri

とかしなくてもよくなった. そもそもインストールなので何度もするようなものじゃないですけどね.

使い方の変更

symfony/consoleを使用するように変更しました.

php saori init
php saori draft article_name
php saori post article_name
php saori build
php -S localhost:8000 -t local

このような使い方です. saoriはインストール時に存在していますので, 自分で実行のためのコードを書く必要はないです.

pageコマンドの追加

利用者が記事以外のページを作成したいときに使うコマンドです. php saori page aboutとするとcontents/page/about.mdが作られます. ここに色々と書いてビルドすると/about/index.htmlが生成されます.

httpsのリダイレクト

saori(デフォルトのテーマ)ではhttpでアクセスされた際に, httpsへとリダイレクトするように変更しました.

pixiv 2016 SUMMER BOOT CAMPに参加

ピクシブのインターンに参加

pixiv 2016 SUMMER BOOT CAMPにエンジニア職で参加をしたのでその話です.

参加するまで

GitHub選考のあるインターンを探していたところ, ピクシブさんのインターンを見つけました. 普段からPHPを使っており, pixivはPHPで作られているので,これは応募するしかないと思い応募しました.
書類選考と,面接(Skype)がありましたが無事にパスして参加することになりました.

インターンの形式

今回のインターンは学生たちが集まってハッカソンをするとかではなく, 実際のチームに配属され, そこで仕事をするというもの. (全体)会議にも参加します. チームによってはユーザの入会率や開封率などの数字で振り返ったりもします. 私はpixivメンテナンスチームに配属となり, バグ修正やコードのリファクタリングを行ったので, ユーザ数などで振り返るとかってのはなかったです. 私の場合, テストの作成だったり, 新しいクラスの設計とかもやりました.

主な流れ(メンテナンスチーム)

  1. コードの改修
  2. プルリクエストの作成
  3. コードレビュー
  4. コードの修正
  5. 本体にマージしてもらえる

業務とか

修正・改修した箇所はいくつかあるのですが, その中から1つ話したいと思います.

画像投稿時のバグ

修正したバグの1つは, とあるフォームで巨大な画像をアップロードするとPHPのエラーが出てしまうというものでした. (本番環境では再現させてないのですが, もしかしたら白い画面?)
まずはじめに画像のバリデーション失敗時にエラー画面を出すようにしたら, 該当箇所は修正できました. しかしながら, 別のところがおかしくなってしまいました. どうやら修正の仕方を間違えていた. なので他の正常なフォームと比べながらコードを辿っていき, エラーの原因となっている箇所を探しました.
無事に該当箇所を見つけて修正できたのですが, 該当箇所を探しているうちに別のバグ(?)もあったのでそれも報告して修正をしました.

その他

コードを書く以外にも朝会, 夕会, 全体会議とかがありました. 全体会議はいろいろな数字や戦略の話が出たりと, 本当にインターン生も参加していいのかってものでした.

参加してみて

初めてのインターンということで, 自分がどこまで出来るのかなど不安だらけでしたが5日間楽しむことができました. 他とは比較できないのですが, ものすごくいいインターンでした. オフィスは会議室以外に壁がなく, ニックネームで呼び合うというコミュニケーションが溢れているところでした.
開発している時に感じたのは, PHPDocの大切さです. 今までは個人でコードを書くことばかりだったので, ドキュメントを残さないことが多々ありましたが, 大規模で多くの人が書いたコードを触るにあたって, ドキュメントの大切が分かりました. 他にもメンターさんから, 書かれているコードに敬意を持つこととメンテナンスの重要さを教わりました.
メンターさんたちと話す機会も多く, 会社やサービスの現状や大規模なサービスならではの悩みなど聞くことができた. 大変貴重な体験ができたインターンでした.

終わりに

5日間と短い期間でしたが, 学ぶことの多い5日間でした. 5日間ありがとうございました. 参加できるようなら, また参加したいです.


Twitter #pixiv_BOOTCAMP

学年暦APIを作った

簡単な大学の学年暦APIを作ったのでその報告です.

https://ritsucal.hrgruri.com です

大学と大学院(情報理工学研究科)の学年暦をJSONで取得できるという簡単なものです. 使い方はドキュメントを見てもらえればいいかと.
検索機能ですが,そのうちsince, untilができるようにはしたいと思います