BASE開発チームブログ

フリーミアムなネットショップ構築サービス BASE( https://thebase.in )の開発チームによるブログです。開発メンバ積極募集中! https://www.wantedly.com/companies/base/projects

PHPerKaigi 2018にプラチナスポンサーとして協賛いたします!

こんにちは、BASE株式会社 エンジニアの東口です。主にサービスの決済部分を担当しています。

この度、BASE株式会社は、PHPerKaigi 2018にプラチナスポンサーとして協賛いたします。

phperkaigi.jp

PHPerKaigi(ペチパーカイギ)は、現在PHPを使用している、過去にPHPを使用していた、これからPHPを使いたいと思っているエンジニアが、技術的なノウハウを共有するためのカンファレンス(イベント)です。 BASEは、サーバーサイドの大部分をPHPを使って構築しているため、この機会を通してPHPのコミュニティ発展に貢献できればという想いから協賛を決めました。

私自身もレビューをもらいやすい細かいプルリクの切り分け方 | PHPerKaigi 2018というタイトルで発表いたします。

カンファレンス当日は、皆様にノベルティを配布させていただいたり、弊社エンジニアも参加いたしますので、ぜひお気軽にお声掛け下さい。

イベント概要

  • 日時 2018年3月9日(金)〜3月10日(土)

  • 場所 練馬区立区民・産業プラザ Coconeriホール

  • 主催 PHPerKaigi 2018実行委員会 (実行委員長: 長谷川智希 / @tomzoh)

  • 公式HP:https://phperkaigi.jp/2018/

CakePHP Cookbook を直す方法(表示確認してからプルリクエストを出すまで)

はじめまして、2017年9月に入社したBack-End Engineer の田中です。アプリケーションが使うPHP/CakePHPのバージョンアップを担当しています。

BASE ではサーバーサイドアプリケーションの大部分がCakePHP2を使って構築されています。 日常的にCookbookやCakePHPコアのコードを読んでいて、時々typoや不具合を見つけてはプルリクエストを送っています。 PHP 7.2 でテストスイートをパスさせる修正もしたので、PHP7.2 でも動くはずです。

CakePHPユーザーの方で、ドキュメントにtypoを見つけたことはありませんか?ドキュメントへの貢献についてのページを読むと、まずはメールを送る必要があるようなことが書いてあり面倒そうに思えますが、実際のところプロジェクトがGitHubに移行してからはいきなりプルリクエストを送っても問題ないようになっています。この記事ではドキュメントをPCで修正してプルリクエストを送る方法を説明します。

この記事の内容は2018/02/08にランサーズ株式会社で開催されたCakePHPクックブックを直してみよう勉強会 - connpassで解説した内容に多少の修正を加えたものです。

CakePHP のドキュメントを直す

CakePHP Cookbook 日本語ドキュメントはボランティアベースで翻訳されています。 翻訳率はかなり高いですが、typoや読み取りづらい部分が見つかることがあります。 CookbookはGitHubでホストされているので、GitHubアカウントさえあれば、修正してプルリクエストすることができます。以下の記事をご覧ください。

こちらの方法だと、PCにリポジトリをコピーしなくてもよいので、簡単に修正依頼できますが、表示確認ができません。 マークアップやサンプルコードを含めて修正するときは、表示確認したくなります。 その場合はローカルPCで作業する必要がありますのでその方法を説明します。

目次

  • リポジトリをコピーして作業を始めるまで
  • テキストを修正してローカルビルドする
  • プルリクエストを作成する
  • 補足

リポジトリをコピーして作業を始めるまで

事前の準備としてgitインストールとSSH鍵の設定が必要です。以下の記事が参考になります。

monsat.hatenablog.com

準備が終わったら、Cookbook用のリポジトリにアクセスします。

github.com

ページ右上にあるForkボタンを押しましょう。

f:id:tenkoma:20180204033301p:plain

そうすると、自分専用のリポジトリが作成されます。

github.com

次にリポジトリをローカルPCにクローンします。 [your-name] はあなたのGitHubアカウント名に置き換えてください。

$ mkdir -p ~/src/github.com/cakephp
$ git clone git@github.com:[your-name]/docs.git ~/src/github.com/cakephp/docs

常に最新のソースファイルから作業に着手するために、オリジナルのリポジトリを upstream として登録しておきます。

$ git remote add upstream git@github.com:cakephp/docs.git

最後にDocker をインストールします。ドキュメントをビルドするために必要な環境を簡単に構築できるようになっていますので、手元のPCにインストールしてください。 Docker Storeから、お使いのPCのプラットフォーム向けインストーラをダウンロードして、インストールしてください。

https://store.docker.com/search?type=edition&offering=community

テキストを修正してローカルビルドする

まずは、手元でドキュメントをビルドして、ブラウザで確認してみましょう。以下のコマンドを実行します。

$ cd ~/src/github.com/cakephp/docs
$ docker build -t cakephp/docs .
$ docker run -it --rm -v $(pwd):/data cakephp/docs make html-ja

2行目の docker build ... でビルドに必要なツールをインストールして、3行目の docker run ... でビルドします。

生成されたWebページは build/html/ja ディレクトリ以下にあります。 build/html/ja/index.html をブラウザで開くと生成されたドキュメントを確認できます。

f:id:tenkoma:20180204044217p:plain

次にドキュメントのソースを修正します。今回はCakePHP3 Cookbook で見つけたtypoを修正してみましょう。 *1 upstream/3.0 *2 からブランチを作成します。

# オリジナルのリポジトリの状態をローカルに取得します
$ git checkout 3.0
$ git fetch upstream
$ git merge upstream/3.0
$ git checkout -b fix-ja-console
Switched to a new branch 'fix-ja-console'

ソースを開いて修正します。ドキュメントソースのreStructuredText形式に対応しているエディタを使うのがよいでしょう。以下はPhpStormでの例です。

f:id:tenkoma:20180204050908p:plain

直したらビルドします。

$ docker run -it --rm -v $(pwd):/data cakephp/docs make html-ja

2回目以降は docker build 不要です。

表示が確認できたらコミットします。英語である必要がありますが、typoなら 「Fix typo」でOKです。

$ git commit -am '[ja]Fix typo'

プルリクエストを作成する

あとは、ブランチをプッシュして、プルリクエストをつくるだけです。

$ git push origin fix-ja-console

cakephp/docs: CakePHP CookBookを開くとプッシュしたブランチが表示されるので「Compare & pull request」を押し、「Create pull request」を押すとプルリクエストが作られます。 *3

f:id:tenkoma:20180204054530p:plain

github.com

あとはマージしてもらえるのを待ちましょう。

補足

日本語以外の版もビルドしたい場合は以下のコマンドを実行します。

# 英語
$ docker run -it --rm -v $(pwd):/data cakephp/docs make html-en

# すべての言語
$ docker run -it --rm -v $(pwd):/data cakephp/docs make html

エンジニア募集

BASEではECプラットフォームを一緒に作ったりCakePHPにコントリビュートしたいエンジニアを募集しています!

*1:typo程度ならローカル作業不要ですが、修正箇所を見つけてないので…

*2:3系の最新版のドキュメントでも 3.0 ブランチを更新していきます

*3:2コミット以上のプルリクエストだと、プルリクエストのデフォルトタイトルがブランチ名になってしまうので、「[ja]Fix typo」などに変更しておきます

デブサミ2018において「BASE社におけるフィンテックへの取り組み」というタイトルでお話させていただきます

CTOの藤川です。今回、デブサミにお誘いいただいて登壇させていただくことなりました。

初日 2/15の13:05~13:50の回でE会場とのことです。

BASE社におけるフィンテックへの取り組み

今回お話しようと思ってるプレゼンテーションに類するお話に、以前、情報処理学会の学会誌にフィンテックについての寄稿をさせていただいたことがあります。

フィンテック:3.フィンテックスタートアップのビジネスモデルFintech:3. Business Model of Fintech

こちらではさすがに自社の自慢話をするのは難しかったので、freeeさん、マネーフォワードさんのアカウントアグリゲーションのビジネスから始まり、何が重要か?という部分でメルカリさんの事例を挙げさせていただきました。

まだ、当時はメルカリとフィンテックの繋がりというのはあまり着目されていなかったタイミングでの寄稿だったと思っています。

メルカリさんの例で書いていたのは、要はポイント経済圏のことなわけですが、フィンテックと呼ばれるサービスは、Webサービスを通じなんらかしらの経済合理性や集客力を金融事業に結びつけていく試みですので、その部分を抽象化して、沢山の方々のビジネスに対する共感をいただくことは可能だと思います。

なので、そこについては聴講者の方々には、絶対に損をさせないようにしますってのがまず大前提として。

(我ながらタイトルがいまいちでしたね。BASEのPRみたいなタイトルにしてしまったし、何か特別なことをやってるようなタイトルにしてしまった。それでもお申込みが満員のようで感謝です。)

もう一つは、確かにBASEのPR面の野望はありまして、採用面接をしている時に、無料ECのプラットフォーム事業者という認識はあっても、フィンテック企業だという認知はほとんど得ておらず、しっかり面接でお話することで、我々の狙いを理解いただくことで会社に興味を持っていただくということが多いです。

逆を言えば、1時間、話をしなければ、我々の魅力を知っていただけてないということになり、それでは転職市場に対しても強烈な機会損失をしていると考えられます。

その部分の認知を変えたいというのもあります。

無料EC自体は、これまで沢山の会社がやってきていますし、ショッピングカートのUIのパラダイムもずっと変わっていないし、敵と思わしき企業はビジネスが完成された会社ばかりで、ある意味、ECプラットフォーム市場はコモディティ化していいると言っても過言でないでしょう。

なのに何故、今更ECなの?となるわけですよね。

わかります。

SNSやゲームなどのネットワーク性が前面に出ているサービスと比べても、ただのツールという感覚が強いのかなと思います。そもそも決済やEC業界が好きだという人でなければ、あまり魅力的なサービスのように見えない部分もあります。

一方でEC業界の玄人のおじさん達に言わせると「こんなビジネススキームで儲かるわけがない」となるわけです。

BASEのサービスデザインにおいて、無料ECという仕組みは情報発信プラットフォームの一つであり、BASEという名前からもなんとなく感じ取れるかもしれないですが、インターネット的な世界を作りたいという社会変革を目指したグランドデザインの方にビジネスとしての主眼があります。

会社としての理念が、「価値の交換をシンプルに。世界中の人々が最適な経済活動を行える社会へ」という抽象概念で語られているのは、そこにポイントがあります。

何故、BASEは無料でいいのか?という部分にこそ、他社の有料サービスが考えているビジネスモデルとは違う思想が存在しており、それこそがフィンテック企業として注目いただいている肝になっております。

僕が面接で使うメタファは、銀行で通帳を作る時の「口座維持手数料」って無料ですよね?それ単体だと銀行だって赤字ですよね?BASEも同じなんですよ、というところなんですが、当然我々は銀行ではないのですから、Webサービス企業としての「BASE」がビジネスとして成立するための世界観を、どううまく伝えられるか、そんなあたりにチャレンジしていきたいと思います。(書いててプレッシャーが...)

要は、フィンテックベンチャーの肝は「ただの家計簿アプリ」「ただのフリマアプリ」「ただのネットショップ構築サービス」「ただの決済サービス」ではないんですよ!、、、、ってところなんで、その辺の整理をしていけたらいいし、そのプレゼンテーションを通じて、フィンテックへの魅力を伝えられて、聴講者の方のビジネスにメリットを提供できれば幸いです。

あ、HRの方で採用ページを作ったそうなので、是非見てみてください! jobs.binc.jp

BASEを利用し、皆様のWebサービスに商品販売機能を追加する方法

BASEと連携し、皆様が運営されているWebサービスに商品を販売する機能を追加したい!であるとか、Webサービスのユーザーに簡単に商品を販売する提供し、購入連携を実現したい!というご相談をいただくことがあります。

そのような連携をするメリットとしましては、

  1. 商品販売に関するあれこれを実装、維持、管理しなくてもよい。特にセキュリティ管理周りを外注したい!
  2. 販売機能がコア機能ではないからプラスアルファの価値を提供したい
  3. お金の支払い周りや購入トラブルに関する問い合わせ等が煩雑すぎるから、そこをBASEに外注したい
  4. クレジットカード決済やキャリア決済などを提供したい

などなど、BASEを活用するメリットがそのまま、皆様のWebサービスに組み込めることが考えられます。

このような取り組みに対する一つのご提案をさせていただけたらと思います。

BASEには、ネットショップに慣れてきたオーナー様が、あれをやりたい、これをやりたいというニーズにお応えするための機能拡張「BASE APPS」というものがあります。

その中に「広告効果測定」という機能があります。このAPPSを使うと、購入者様が商品を購入する際の購入完了画面で、任意のタグ、JavaScriptを実行する機能を提供することができます。

いささか裏技的ではありますが、この機能を流用し、Webサービスとの購入連携を実現しようというのがこの記事の趣旨となります。

購入フローは、こちらになります。

f:id:f-shin:20180119152616p:plain

  1. Webサービスは登録済み商品のページURLを通じてBASEショップにリダイレクトする(別窓が良い気がします)
  2. 商品の購入完了ページで、Webサービスに購入完了通知を送る。
  3. Webサービスは通知を元に、BASE APIに購入情報を問い合わせて、サービスを提供する

というフローです。

材料としては、

  1. 皆様のWebサービス
  2. BASEのショップ管理画面内にある「広告効果測定」APPS
  3. BASE API

の組み合わせになります。

■広告効果測定APPS

広告効果測定APPSは、BASEのショップ管理画面からご利用いただけます。

f:id:f-shin:20180119143544p:plain

f:id:f-shin:20180119144623p:plain BASEの商品購入の完了画面に、ここに書いた任意のHTML / JavaScriptが出力されます。iframe内に出力されるのでWebページ経由のWebhookとして皆様のサービスに通知を送ることができます。

購入完了画面のページのURLには、ショップのIDが入っているのでリファラーもしくはJavaScriptでパースすることで、どのお店からのリクエストかも判別可能です。

(なお、購入画面のURLはどこかのタイミングで変わる可能性がありますので、その際は、下記のdevelopers登録のアドレス宛に一ヶ月前ぐらいには、連絡いたします)

■BASE APIを使うためには

プラットフォーム様がBASE Developersからアカウント申請をお願いします。

f:id:f-shin:20180119145027p:plain

developers.thebase.in

BASE APIの利用申請が承認された後、BASEが提供するOAuthログインのコードを書くと、皆様の管理画面から商品を売りたいユーザさんに対して、BASEショップとの連携機能を追加することができます。

ユーザさんからOAuthを通じてBASEショップのアクセス権が移譲されることで、

  • 商品登録 / 削除 / 在庫数の変更
  • 購入者情報の取得

などができるようになります。これらの処理を自動化することで、商品購入と連携して購入者様にサービスを提供することができるようになります。

(そのため、商品を売りたいユーザさんには予めBASEショップを開設いただくことが必要です)

■本機能実現についての検討事項

以上のようにシステム連携自体は簡単にできますが、いくつか検討すべき事項があります。

f:id:f-shin:20180119150546p:plain

エンジニアをかかえるWebサービス様が販売責任を負う形で商品を販売されるのであれば簡単です。

それに対して、皆様のユーザーにこの機能を提供しようとすると、誰が何をするか?という部分が少し煩雑になります。

検討部分として、整理すべきポイントは以下のようになります。

BASEアカウント保有者 = ショップオーナーさんの責任
- 特商法の記載(販売主体 / 返品責任は誰が追うか?)
- お金の流れ(BASEから振り込むので済むなら簡単だけど...)
- 購入者情報の管理(個人情報管理)

システム連携に必要な作業
- 広告測定appsの設定
- 連携タグの設置

API連携して、サービス提供に必要な機能
- 商品の登録、削除、更新
- 購入者情報の取得

その他 APIのドキュメント

本文章の内容としては以上になります。 今後、より高いニーズに応じて機能追加も検討していこうと思っておりますが、ひとまずこちらをご検討くださいませ。

第一回 PHP Wayを開催しました - PHPから別言語に変えることを考えた振り返り

BASE本社で12月19日にPHP Wayというイベントを開催しました。

PHPで成長したWebサービスを他の言語に移行させる話題を見ることがありますが、PHPを使い続ける企業がどのようなことを考えて、その選択をしているのか?ということを共有するイベントでした。

どこか自信を見失いがちなPHPの利用について、適切に状況判断するための材料を共有し、PHPを使うサービスにエンジニアとして関わっていくにあたって無駄に悲観的に思わないようにするのをイベントのゴールとして設計しています。

f:id:f-shin:20171221161545j:plain
(左からコネヒトCTO島田さん、BASE藤川、サイバーエージェント SGE CTO 白井さん)

BASE社の発表資料はこちらです。

一度採用した開発言語、実行環境やフレームワークは、一定のライフサイクルの後に、それを採用していることそのものが技術的負債と呼ばれるようになりがちです。これは技術の進化やセキュリティトレンドが存在する以上、インターネットに繋がるシステムとして避けられない部分でもあります。

一方で、お客さまやお客様のお客様に向けてサービス性を実現するために「維持する」という行為もエンジニアリングという視点では重要で、その部分がネットでは軽視されがちかなと思う風潮もあります。その中で、PHPはちゃんと進化していて、長く使えるという面でも柔軟性が非常に高い言語だと思います。

このような部分は、もはやベテランは当たり前すぎて語らないってことなのかもしれませんが、キャリアの浅い若手エンジニアだと日常のアテンションについつい関心を持っていかれがちになって、大切なことを見失うこともあるかなと思うこともありますので、あえて当たり前のことを共有しておくのも大切かと思いました。

ネットで発言する開発者が、全員がサービスのような毎日継続的に開発をする人だけじゃないですし、その場その場で新しい技術を使い分けていくことで自身の商品性を保ってる人たちもいると思うので、新しいものは後出しなんだから素敵な仕様なのは当然であるという1つの価値観だけで開発技術を捉えるのではなく、それぞれの論点をちゃんと整理して一番大切なものは何なのか?が共有できるといいなって思いました。

そういう意味で、今回ご登壇いただいたコネヒト CTOの島田さん、サイバーエージェント SGE CTOの白井さんにはWebサービスやソーシャルゲームという、一度当たるとライフサイクルが想像以上に長いサービスを運営していくにあたっての技術選択基準についてお話いただきました。そこにPHPの選択も決して間違っていないということがご理解いただけると幸いです。

BASE社は、今後も「ちゃんとPHPを使うこと、あらゆる技術を適材適所で使うことを身に付け、時代の変遷に対して正しく技術選択ができるエンジニアを成長させ、どこのWebサービスの会社にでも転職できるエンジニアを育てる」ことを社員のスキル形成を前提として、彼らがそれでもBASE社で働く喜びを持ち続け、共に戦っていけるように、しっかりサービスを成長させていきたいと思っています。

関連リンク: コネヒト CTO 島田さんの記事 tech.connehito.com

サイバーエージェント SGE CTO 白井さんの発表資料 ameblo.jp