CentOS 7.0でDockerを動かしてみた

CentOS 7.0でDockerを動かしてみた

先日開催された第2回東京SoftLayer勉強会で『SoftLayerでDockerを使ってみた』という発表があり、Dockerのインストールから使い方までの手順が解説されていました。

個人的にDockerを試してみたいということもあり、さっそく解説されていた手順を参考にDockerを動かしてみました。勉強会ではCentOS 6系向けの手順となっていましたが、私の方ではCentOS 7系で試してみました。

CentOS 7.0のセットアップ

GUI等は使用しないので、minimalインストールの状態からDocker環境を構築していきます。以下はインストール後にsshログインが行えるようになるまでの手順です。

SELinuxの無効化

/etc/selinux/configを以下のように修正し、SELinuxを無効化します。

--- config.orig 2014-07-29 11:24:02.949653548 +0900
+++ config      2014-07-29 11:24:09.957653412 +0900
@@ -4,7 +4,7 @@
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
-SELINUX=enforcing
+SELINUX=disabled
 # SELINUXTYPE= can take one of these two values:
 #     targeted - Targeted processes are protected,
 #     minimum - Modification of targeted policy. Only selected processes are protected.

grub.cfgの設定

起動時のコンソールログを見えるようにしておきたいので、/boot/grub2/grub.cfgを以下のように修正します。ついでにLANGもen_US.UTF-8に変更しておきます。

--- grub.cfg.orig       2014-07-29 11:24:18.721653243 +0900
+++ grub.cfg    2014-07-29 11:24:38.572652858 +0900
@@ -81,7 +81,7 @@
        else
          search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61
        fi
-       linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=ja_JP.UTF-8
+       linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 LANG=en_US.UTF-8
        initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
 }
 menuentry 'CentOS Linux, with Linux 0-rescue-6764668114ff4741a8994286ae140fdd' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-6764668114ff4741a8994286ae140fdd-advanced-dd4521d9-ca1c-462b-b353-2ba57bf4fc61' {
@@ -95,7 +95,7 @@
        else
          search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61
        fi
-       linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet
+       linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto  vconsole.font=latarcyrheb-sun16
        initrd16 /boot/initramfs-0-rescue-6764668114ff4741a8994286ae140fdd.img
 }
 if [ "x$default" = 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' ]; then default='Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64'; fi;

ホスト名の設定

以下の手順でホスト名を設定します。

# echo dockertest.furandon.net > /etc/hostname

固定IPアドレスの設定

DHCPよりも固定IPアドレスの方が作業しやすいため、Arch Wikiの『固定IPアドレス』を参考にしながら設定します。

/etc/conf.d/network@enp0s3にIPアドレス等を記述します。/etc/conf.dディレクトリは存在しないので予め作成しておきます。

# mkdir /etc/conf.d
# touch /etc/conf.d/enp0s3

/etc/conf.d/network@enp0s3の中身は以下の通りです。

address=192.168.0.232
netmask=24
broadcast=192.168.0.255
gateway=192.168.0.1

/etc/systemd/system/network@.serviceにsystemdのユニットファイルを作成します。
(Arch Wikiの内容を参考に作成しています)
Arch Wikiの/etc/systemd/system/network@.service中でipコマンドが/usr/bin/ipでフルパス指定されていますが、CentOS-7では/sbin/ipとパスが異なるので注意してください。

[Unit]
Description=Network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/network@%i

ExecStart=/sbin/ip link set dev %i up
ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev %i
ExecStart=/bin/sh -c 'test -n ${gateway} && /sbin/ip route add default via ${gateway}'

ExecStop=/sbin/ip addr flush dev %i
ExecStop=/sbin/ip link set dev %i down

[Install]
WantedBy=multi-user.target

サービスを有効化します。

# systemctl enable network@enp0s3.service

/etc/resolv.confの設定

インストール時にrpmパッケージのインストール等でネットワーク設定が行われており、/etc/resolv.confには(DHCPでのIPアドレス取得による)nameserver設定が入っています。固定IPアドレスでも同じnameserver設定を利用するため、この段階での設定変更は不要です。

LANGの設定

/etc/locale.confでLANGをen_US.UTF-8に設定します。
(日本語のままでいいよ、という場合はこの手順をスキップしてください)

--- locale.conf.orig    2014-07-29 11:24:55.014652540 +0900
+++ locale.conf 2014-07-29 11:25:01.258652419 +0900
@@ -1 +1 @@
-LANG="ja_JP.UTF-8"
+LANG="en_US.UTF-8"

不要なサービスの停止

Dockerを試す用途では不要と思われるサービスを停止します。

$ sudo systemctl disable avahi-daemon.service
$ sudo systemctl disable dbus-org.fedoraproject.FirewallD1.service
$ sudo systemctl disable dbus-org.freedesktop.Avahi.service
$ sudo systemctl disable dbus-org.freedesktop.NetworkManager.service
$ sudo systemctl disable dbus-org.freedesktop.nm-dispatcher.service
$ sudo systemctl disable NetworkManager-dispatcher.service
$ sudo systemctl disable NetworkManager.service
$ sudo systemctl disable postfix.service
$ sudo systemctl disable tuned.service
$ sudo systemctl disable avahi-daemon.socket

ユーザの追加

作業用のユーザを追加します。

$ sudo useradd -g users -G wheel -m -s /bin/bash fpig
$ sudo passwd fpig

再起動

ここで一旦再起動します。再起動後、固定IPアドレスが付与されているか等の確認をおこないます。

$ sudo shutdown -r now

ここまでで最低限の設定は完了し、sshでログインできる状態になっています。
以降はsshログインした状態での作業となります。

Dockerを試してみる

dockerのインストール

docker.x86_64というパッケージが提供されているので、これをインストールします。

$ yum search docker
...
docker-registry.noarch : Registry server for Docker
docker.x86_64 : Automates deployment of containerized applications
$ sudo yum install docker

勉強会で例示されていたCentOS 6系の環境では、EPELからDockerをインストールしていましたが、CentOS 7系の環境ではベースリポジトリにDockerパッケージが含まれていました。

$ rpm -qa | grep docker
docker-0.11.1-22.el7.centos.x86_64
$ yum provides docker
...
docker-0.11.1-19.el7.centos.x86_64 : Automates deployment of containerized
                                   : applications
Repo        : extras
$ grep -A5 '^\[extras' /etc/yum.repos.d/CentOS-Base.repo
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Dockerサービスを有効化します。DockerパッケージにSystemdのユニットファイルが同梱されているので、これを利用します。

$ rpm -ql docker-0.11.1-22.el7.centos.x86_64 | grep systemd
/usr/lib/systemd/system/docker.service
$ sudo systemctl enable docker.service
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'
$ systemctl list-unit-files | grep docker
docker.service                            enabled

上記設定は再起動してから有効になるので、ここでは手動でdocker.serviceを起動します。

$ sudo systemctl start docker.service

さっそくdockerコマンドを使ってみます。

$ sudo docker version
Client version: 0.11.1-dev
Client API version: 1.12
Go version (client): go1.2
Git commit (client): 02d20af/0.11.1
Server version: 0.11.1-dev
Server API version: 1.12
Go version (server): go1.2
Git commit (server): 02d20af/0.11.1

Dockerイメージのダウンロード

手元でDockerイメージを作るところまで試してみたかったのですが、まだ使い始めたばかりということもあり、既存のDockerイメージファイルを使ってみることにしました。

$ sudo docker pull ubuntu

しばらく待つとUbuntuのイメージファイルが手元にダウンロードされます。使用可能なイメージはdocker imageで確認できます。

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               ba5877dc9bec        7 days ago          192.7 MB
ubuntu              trusty              ba5877dc9bec        7 days ago          192.7 MB
ubuntu              latest              ba5877dc9bec        7 days ago          192.7 MB
ubuntu              precise             b9e56c8f2cf5        7 days ago          103.8 MB
ubuntu              12.04               b9e56c8f2cf5        7 days ago          103.8 MB
ubuntu              14.10               6ef6f1a66de1        7 days ago          194.1 MB
ubuntu              utopic              6ef6f1a66de1        7 days ago          194.1 MB
ubuntu              12.10               c5881f11ded9        5 weeks ago         172.1 MB
ubuntu              quantal             c5881f11ded9        5 weeks ago         172.1 MB
ubuntu              13.04               463ff6be4238        5 weeks ago         169.4 MB
ubuntu              raring              463ff6be4238        5 weeks ago         169.4 MB
ubuntu              13.10               195eb90b5349        5 weeks ago         184.6 MB
ubuntu              saucy               195eb90b5349        5 weeks ago         184.6 MB
ubuntu              10.04               3db9c44f4520        3 months ago        183 MB
ubuntu              lucid               3db9c44f4520        3 months ago        183 MB

Dockerコンテナの起動

さっそくDockerでUbuntuを起動してみます。

$ sudo docker run -i -t ubuntu:14.10 /bin/bash

サクッとUbuntuが起動しました!
/etc/lsb-releaseを見ると、確かにUbuntuです。

root@9cf71dd83894:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.10
DISTRIB_CODENAME=utopic
DISTRIB_DESCRIPTION="Ubuntu Utopic Unicorn (development branch)"

Dockerコンテナのデタッチ・アタッチ

起動したDockerコンテナ上でexitするとコンテナは停止してしまいます。練習もかねてDockerコンテナのデタッチ→アタッチ→exitによるコンテナ停止という手順を試してみます。

Dockerコンテナを終了せずに抜ける(デタッチする)には、Ctrl+p Ctrl+qを入力します。

root@9cf71dd83894:/# (ここでCtrl+p Ctrl+qを入力)$
$

docker psコマンドで稼働しているコンテナを確認できます。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9cf71dd83894        ubuntu:14.10        /bin/bash           9 minutes ago       Up 9 minutes                            backstabbing_rosalind0

コンテナにアタッチしてみます。

$ sudo docker attach 9cf71dd83894
root@9cf71dd83894:/#

無事にアタッチでできました。後はexitでコンテナを終了します。

root@9cf71dd83894:/# exit
exit
$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$

export/import

私の手元ではまだ試していませんが、イメージファイルのexport/importも可能です。
以下の手順でexport/importを行います。

$ docker export <コンテナID>
$ docker export 14773ff9e93c > myweb.tar    # コマンド例
$ docker import [リポジトリTAG]
$ docker import < - myweb:rel1 < myweb.tar  # コマンド例

ローカルストレージのアタッチ

こちらも私の手元では試していませんが、Runコマンドの"-v"オプションでホストのディレクトリをアタッチ可能です。

$ docker run -t -i -v <local_dir>:<container dir>:<rw|ro> centos /bin/bash
$ docker run -d -p 5000:5000 -v /home/hoge/data:/tmp/data centos  # コマンド例

/home/data/dataは、共有ストレージ(NFS)やディスクミラー(DRBD)、分散ストレージ(Ceph-fs)等を利用して自分でミラーリングします。

まとめ

参加した勉強会でDockerの一連の使用手順が解説されていました。Dockerを覚えてみたいと思っていたので、さっそく覚えた手順を自分の環境で試してみました。

思っていたよりも簡単にコンテナの実行が行え、ついに我が家にもDockerの技術が伝来したという感じです。
(種子島に火縄銃が伝来した……という気分です)

まだ試してはいないものの、イメージのexport/importやプライベートリポジトリといった機能もあるようなので、勉強会用のイメージ提供に活用できればと思います。

第2回 東京SoftLayer勉強会に参加してきました

第2回 東京SoftLayer勉強会に参加してきました

第2回 東京SoftLayer勉強会に参加してきました。前回は5月だったので、2ヵ月ぶりの開催ですね。

前回の勉強会メモと同様に、今回も勉強会メモをまとめてみました。

サムライスタートアップアイランドご紹介

はじめに勉強会の会場であるサムライスタートアップアイランドの紹介がありました。

2011年11月1日にオープンしたサムライスタートアップアイランド(SSI=Samurai Startup Island)は、スタートアップ企業とその支援者が集まる場所を提供しているとのことです。
(SSIの紹介ページからの受け売りです……)
会計士さんも常駐しており、スタートアップ企業におけるファイナンス関係のお悩みごともフォローできますとのことです。

現在50社ほど入居しており、コワーキングスペースとしても活用されています。羽田空港が近いことから、外国からの訪問者への対応も考えられており、海外展開を考える企業にもオススメのようです。

SoftLayerのストレージと使い分けについて

発表者は日本IBMの新島さん。SoftLayerのビギナーズガイドを書いておられるとのことです。

SoftLayerはサーバに組み込まれたストレージだけでも複数種類あり、ストレージの観点から利用可能なサービスの一望と目的別の使い分け方の解説という内容での発表でした。

SoftLayerのストレージ

  • BM(Mare Metal Server)とVS(Virtual Server)で構成が異なる
  • BMのディスク

    • SATA,SAS,SSDから選んで指定できる
    • BMのモデルによって搭載できるディスクの台数が異なる
    • 生のディスク(物理的なディスク)なので、必ずミラーリングRAID構成にすること
      • BMのディスクは本当のサーバー(手元に物理サーバを構築する場合)と同じに考えた方がよい
  • VSのディスク

    • ローカルドライブとSAN storageのを選んで指定できる
    • ローカルドライブは2台で400Gまで

    • SAN storage(iSCSI)は以下の構成から選択できる

      • 5台まで、25,100Gまで、2台以降は100-2000GBまで)の2つ
    • 仮装サーバのローカルドライブ→故障すると少し時間かかる

      • (SoftLayerの中の人が故障ドライブをせっせと交換する)
    • SANストレージの場合はバックアップ構成がくめる
      • ただしネットワークも障害点となる可能性が出てくる
  • portable diskとしての利用

    • virtual serverの2nd diskを切り離し、portable diskとして利用できる
    • 切り離したportable diskは、別のvirtual serverに取り付けることもできる

SoftLayerで利用できるストレージ

  • NAS,iSCSI,オブジェクトストレージが利用できる
  • NAS
    • CIFS,FTPでアクセス可能
    • プライベートLANに接続されている
      • (SoftLayerのサーバルーム写真における、青色のケーブルですね)
    • 現時点では未対応のため、NFSは利用できない
  • iSCSI
    • iSCSIもプライベートLANに接続されている
    • スナップショットが取得可能
    • データセンター間でレプリケーション可能
  • オブジェクトストレージ
    • OpenStackのswift互換
    • ポータルやREST APIからアクセスできる
    • CloudFuseでインスタンスにmountして使うこともできる
    • CDNを使ってファイルを配信することもできる
  • eVault(イーボルト)というバックアップツールがある

iSCSIのスナップショット

  • 30分毎にレプリケーションが実行される
  • 切り戻しは時間がかかる
  • レプリカのカスケードはできないので、マスター復帰時には必ず切り戻しが行われる
    • 切り戻しは時間がかかる!とのこと

各ストレージの使い分け

  • サーバのストレージとして

    • 大容量ならBMでSATA Drive
    • 高速IOならBMでSSDSAS Drive
    • サーバ生涯時の切り替えならVSでSAN Drive
    • 少用量で安さならVSでlocal drive
  • データ用、バックアップ用として

    • Snapshot使いたいならiSCSI
    • 複数サーバで共有したいなら
      • NASもしくは
      • VSかBMでファイルサーバを構成、
    • archive用ならobject storage

その他

  • 近日中にiSCSIの弱点を克服したソリューションが出てくるかも?

Why Riak & Why SoftLayer?

発表者はBashoジャパンの上西さん。Riakの紹介とSoftLayer上でRiakを動かすと何が嬉しいかについての発表でした。

スライドはWhy Riak? Why SoftLayer?にて公開されています。

スライドが公開されているので、自分のメモは不要かとも思ったのですが、前回のSoftLayer勉強会でのRiakのLTはただ聞くだけになっていたので、今一度自分なりにRiakについてがーっとまとめてみました。

Riakについて

  • システムの運用において可用性は大事
  • しかし、可用性に対する脅威は数多く存在する
    • ハードウェア故障
    • ネットワーク故障
      • スプリットブレインシンドロームによるデータ破壊
    • ソフトウェアのアップデートやメンテナンス
    • システムの過負荷

Riak

  • RiakはErlangで記述されたNoSQLデータベース
  • QuorumレプリケーションによりN個のノードにデータを複製することでノードがひとりくらい壊れていてもデータの書き込みが可能
  • 各ノードが管理するパーティションConsistent Hashingと呼ばれる160bitのキー空間を等分したリング状のハッシュテーブルになっている
    • レプリカはN個(=3)のノードにコピーされる

ノードが一時故障した場合

  • リング上の次のパーティションに書き込むことで、レプリカがN個ある状態を担保しておく
  • 一時故障ノードが復旧した時にレプリカを返す

ネットワーク故障の場合

  • Riakでは分断された各ノードでの書き込みを許容する
  • 復旧したら書き戻す
  • そのため、復旧時にデータの不整合(暗黙的な上書き)が発生する場合がある
    • 以下の手法で不整合を回避する
    • 不整合のパターンはいくつか存在する
      • write-write conflick →比較的対応しやすい
      • write-delete conflick →少しややこしい対応手順になる

Riakのバックアップ機能

なぜクラウドでRiakか

  • DBなどのミドルウェアが優れていてもHWがこけたら意味がない
  • なので、SoftlayerのBM上でRiakを使えると嬉しい
  • なぜBMか?VSではダメなのか?
    • 分散システムで大事なことは「故障の単位」
    • VSが動いているBMがこけると、Riakからは多重故障にみえてしまう
      • するとRiakの分散ノードがまるごと落ちるという事態が発生する
      • そのため、RiakはBMでの運用を推奨している

その他

参考リンク

QuantaStor概説/QuantaStor使ってみた

発表者はアファーム・ビジネスパートナーズ株式会社の西脇さんと日本情報通信の常田さん。

QuantaStoreアーキテクチャユースケース、使ってみた感想についての発表でした。

  • OSNEXUSについて

  • QuantaStor

    • QuantaStorはSAN(iSCSI/FC)とNAS(NFS)を兼ね備えたストレージアプライアンス
    • 64bit Intel/AMDの汎用サーバで稼働するUbuntu Server(Linux)上にインストールし、ソフトウェアベースのストレージとして利用する
    • QuantaStorはBMのみで利用可能
      • また、RAID構成を組む必要があるため、ディスクは4本以上必要
      • (SoftLayerのBMのドライブ数は2,4,6,12,24,36から選択できる)
  • 来月のSoftwareDedisnからSoftLayerの記事が連載されるとのこと

参考リンク

Object Storageを使ってみた

発表者は日本IBM高良さんSoftLayer探検隊の隊長さんとのことです。

Raspberry PiとSoftLayerのObjectStorageの連携に関する発表でした。

発表スライドは第二回SoftLayerユーザ会 ラズベリーパイとオブジェクトストレージを繋いでみたにて公開されています。詳細な手順はSoftLayer探検隊 第16回 Raspberry Pi で撮影した画像をSoftLayerのオブジェクト・ストレージに保存するにて公開されています。

発表の中で「組み込み機器とクラウドがつながる時代になった」という説明が印象的でした。最近IoT(Internet of Things:モノのインターネット)という言葉(バズワード?)をよく聞きますが、Raspberry PiとSoftLayerの組み合わせによる具体的な事例を見るのは初めてだったので、とても感銘をうけました。

SoftLayerでDockerを使ってみた

発表者はCUPA(一般社団法人クラウド利用促進機構)荒井さん

Dockerを利用したシステムポータビリティとDR(Disaster Recovery)対応について、SoftLayerを使用しての解説でした。

Dockerは個人的に試してみたいと常々思っていたので、SoftLayerの話は一旦どっかに置いておき(Dockerだけに)、別途ブログ記事を分けてみました。

まとめ

第2回東京SoftLayer勉強会に参加してみました。何となくSoftLayerがどんなものが見えてきた気がします。とはいえ、実はまだSoftLayerを使ってみたことが無いので、そろそろ触ってみようかなと思います。

Emacs Lispで解く月刊少女野崎くんED「ウラオモテ・フォーチュン」

Emacs Lispで解く月刊少女野崎くんED「ウラオモテ・フォーチュン」

今期オススメのアニメのひとつである「月刊少女野崎くん」、ED曲の「ウラオモテ・フォーチュン」には以下のフレーズが出てきます。

キライの ハンタイの ハンタイの ハンタイの ハンタイの  
そのさらにハンタイの
キモチを伝えるのって 何だか難しい

ぐぬぬ、まるでバカボンのパパ話法(「賛成のハンタイなのだ」)です。これではスキなのかキライなのかよく分かりません。

ここはひとつ、Emacs Lispでスキなのかキライなのかはっきりさせてみましょう。
Emacsのscratchバッファ(lisp-interaction-modeなバッファならどれでもOKです)で以下を実行してみます。

(setq キライの nil)

(defun ハンタイの(p) (not p))
(defun そのさらにハンタイの(p) (not p))
(defun キモチを伝えるのって(p) (if p 'スキ 'キライ))
(defun 何だか難しい(p) p)

(何だか難しい
 (キモチを伝えるのって
  (そのさらにハンタイの
   (ハンタイの
    (ハンタイの
     (ハンタイの
      (ハンタイの キライの)))))))
スキ

無事に「スキ」というお返事(?)が得られました。

が、曲のラストでさらに苛烈なフレーズが出てきます。

キライの 
ハンタイの ハンタイの ハンタイの ハンタイの ハンタイの ハンタイの 
ハンタイは?

これはいけません。スキなのかキライなのか考えているうちに曲が終わってしまいます。これもEmacs Lispで解いてみましょう。

(setq キライの nil)

(defun ハンタイの(p) (not p))
(defun ハンタイは?(p) (if (not p) 'スキ 'キライ))

(ハンタイは?
 (ハンタイの
  (ハンタイの
   (ハンタイの
    (ハンタイの
     (ハンタイの
      (ハンタイの キライの)))))))
スキ

こちらも無事に「スキ」というお返事が得られました。

まとめ

月刊少女野崎くんED曲の「ウラオモテ・フォーチュン」をEmacs Lispで解いてみました。『(キライの (ハンタイの (ハンタイの ...)))』のように、歌詞の並び通りにしたかったのですが、実際は単語の順番をひっくり返しての処理になり、日本語は後置演算子なのか……と変なことに気がついてしまいました。

Fedora20をインストールしてみた

Fedora20をインストールしてみた

Fedora20の環境を用意する必要があったので、インストール後の設定手順をまとめてみました。

sshログインのみで使用する形態を想定しているため、GUIの設定は行わず、インストール後に最低限の設定をするだけの手順になっています。

インストールCD-ROMの入手

今回は以下のURLからネットワークインストール用のCD-ROMをダウンロードしました。インストール作業中に出てくる「ベース環境」の画面で「最小限のインストール」を選択すると、(CentOSでいうところの)minimalインストールになるようです。

インストール後の作業

不要なサービスの停止

必要に応じて不要なサービスを停止します。CentOS環境のようなchkconfigかと思っていたのですが、initデーモンがsystemdに置き換えられたため、コマンド自体が変わっていました。

systemdではsystemctlコマンドを使用しており、以下はchkconfigとのコマンド対応表です。

サービスの
一覧表示
CentOSの場合chkconfig --list
Fedora20の場合systemctl list-unit-files
現在有効に
なっている
サービスの
一覧表示
CentOSの場合chkconfig --list | grep 3:on
Fedora20の場合systemctl list-unit-files | grep enabled
サービスの
有効化
CentOSの場合chkconfig sshd on
Fedora20の場合systemctl enable sshd.service
サービスの
無効化
CentOSの場合chkconfig sshd off
Fedora20の場合systemctl disable sshd.service

ネットワークの設定

ネットワークまわりの設定はこれまでの方法(CentOS等の設定方法)と変わりないようです。

# diff -u /etc/sysconfig/network.orig /etc/sysconfig/network
--- /etc/sysconfig/network.orig 2014-06-26 16:56:00.223810936 +0900
+++ /etc/sysconfig/network      2014-06-26 17:02:09.848893449 +0900
@@ -1 +1,4 @@
 # Created by anaconda
+
+NETWORKING="yes"
+GATEWAY="192.168.0.1"

ただし、NICのデバイス名がeth0等ではなく、p2p1といった名前になっています。

# diff -u /etc/sysconfig/network-scripts/ifcfg-p2p1.orig /etc/sysconfig/network-scripts/ifcfg-p2p1
--- /etc/sysconfig/network-scripts/ifcfg-p2p1.orig      2014-06-26 16:38:20.626798779 +0900
+++ /etc/sysconfig/network-scripts/ifcfg-p2p1   2014-06-26 16:54:57.349810215 +0900
@@ -1,5 +1,7 @@
 TYPE="Ethernet"
-BOOTPROTO="dhcp"
+BOOTPROTO="none"
+IPADDR0="192.168.0.225"
+PREFIX0="24"
 DEFROUTE="yes"
 IPV4_FAILURE_FATAL="no"
 IPV6INIT="yes"

ホスト名の設定

ホスト名は/etc/hostnameに記載します。CentOS等では/etc/sysconfig/networkにHOSTNAME="..."な形式で設定していたのですが、これもFedora20では設定方法がかわったのでしょうか?(まだ調査しきれていないです...)

# cat vmfedora20 > /etc/hostname

SELinuxの無効化

SELinuxは無効化しておきます(ごめんなさい...)。

# diff -u /etc/selinux/config.orig /etc/selinux/config
--- /etc/selinux/config.orig    2014-06-26 17:04:15.353965308 +0900
+++ /etc/selinux/config 2014-06-26 17:04:42.989963918 +0900
@@ -4,7 +4,7 @@
 #     enforcing - SELinux security policy is enforced.
 #     permissive - SELinux prints warnings instead of enforcing.
 #     disabled - No SELinux policy is loaded.
-SELINUX=enforcing
+SELINUX=disabled
 # SELINUXTYPE= can take one of these three values:
 #     targeted - Targeted processes are protected,
 #     minimum - Modification of targeted policy. Only selected processes are protected.

起動時のログをコンソールに出力させる(grub.cfgの設定)

OS起動時のグラフィカルな起動画面もよいのですが、起動時のログがコンソールに出力されないと不安になるので、ログが出力されるよう設定します。

以下のdiffではちょっと分かりにくいですが、"rhgb quiet"というオプションを除去しているだけです。

# diff -u /boot/grub2/grub.cfg.orig /boot/grub2/grub.cfg
--- /boot/grub2/grub.cfg.orig   2014-06-26 16:59:24.535293206 +0900
+++ /boot/grub2/grub.cfg        2014-06-26 17:00:01.614295112 +0900
@@ -72,7 +72,7 @@
        else
          search --no-floppy --fs-uuid --set=root 6b176d94-7c9a-4ff7-a007-51d0cd40ccaa
        fi
-       linux   /boot/vmlinuz-3.14.8-200.fc20.x86_64 root=UUID=6b176d94-7c9a-4ff7-a007-51d0cd40ccaa ro vconsole.font=latarcyrheb-sun16  rhgb quiet LANG=ja_JP.UTF-8
+       linux   /boot/vmlinuz-3.14.8-200.fc20.x86_64 root=UUID=6b176d94-7c9a-4ff7-a007-51d0cd40ccaa ro vconsole.font=latarcyrheb-sun16  LANG=ja_JP.UTF-8
        initrd /boot/initramfs-3.14.8-200.fc20.x86_64.img
 }
 menuentry 'Fedora, with Linux 0-rescue-78fd1bcdf2504b058f547faf585019df' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-78fd1bcdf2504b058f547faf585019df-advanced-6b176d94-7c9a-4ff7-a007-51d0cd40ccaa' {

yum update

ここまでで一旦OSを再起動し、IPアドレスが付与されているか等の確認を行ってからyum updateを実行します。

# yum -y update

sudo設定について

Fedora20ではminimalインストールでもsudoがインストールされています。また、wheelグループがsudoできるよう設定されており、visudoで改めて設定する必要はありませんでした。

ユーザの追加

一般ユーザを追加します。sudoできるようにしたいので、セカンダリグループとしてwheelを指定します。

# useradd -g users -G wheel -m -s /bin/bash fpig
# passwd fpig

これでインストール後の設定は一通り完了です。後はsshでログインし、パッケージの追加等で生活環境を整えていきます。

まとめ

Fedora20のインストール後の設定手順をまとめてみました。initデーモンがsystemdに置き換えられた点がCentOSとの大きな違いでした。サービスの有効・無効を切り替えるコマンドもchkconfigからsystemctlになっており、当面はコマンドを調べながらの利用になりそうです。

第1回Webスクレイピング勉強会@東京に参加してきました

第1回Webスクレイピング勉強会@東京に参加してきました

第1回Webスクレイピング勉強会@東京に参加してきました。

シェルスクリプトでスクフェス(スクレイピングフェスティバル)」というタイトルで、シェルスクリプトによるWebスクレイピングの方法について発表してきました。

発表スライドのURLは以下になります。

第2回Webスクレイピング勉強会@東京の開催も決定しており、次回も楽しみです。

補足事項

発表スライド内のスクレイピング手順例は、とある新聞社のデータに対するものです。

勉強会での発表時は今現在のスクレイピング手順を説明していましたが、Web上に公開している発表スライドについては、古いデータ(HTML内のフォーマットが少し異なっている)に対するスクレイピング手順に差し替えています。

Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました

Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました

Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました。

勉強会参加者のツイートは、ハッシュタグ#sumida_secにて参照できます。

以下は勉強会のメモです。私が間違って理解したままメモを書いている箇所もあるかと思いますので、その点にご留意ください。 また、カッコ書きした項目は私の感想・意見となっています。

無線LANデンパゆんゆん観察

CRYPT+YOU,UNDERSTAND TODAY!

  • 発表者は@inaz2さん
  • 資料は以下のURLで公開されています

  • 代表的な現代暗号(RSA,AES,RC4あたり)について、アルゴリズムや使い方も交えた簡単な紹介

  • 換字式暗号
    • 文字、ブロック単位でずらす暗号で、古典暗号のひとつ
      • 「いくつずらしたか」が暗号鍵になる
    • (古典暗号、現代暗号という区分が存在するみたいです)
    • 換字式暗号の例としてはシーザー暗号がある
    • NSAの採用担当者のツイートを例にした換字式暗号の解読デモ
  • xorスクランブルの復元
    • (写真フイルムのネガポジ変換みたいなイメージ、反転→反転で元のデータに戻る)
  • RC4(Rivest Cipher 4)
    • 共通鍵暗号方式のうち、ストリーム暗号と呼ばれるもの
    • 鍵から特定のアルゴリズムに従って擬似乱数を作り、1byteずつのXORで暗号化・復号化する
    • RC4のバイアス問題
      • RC4が生成する擬似乱数列はあまりよろしくなく、2byte目が「0」になる確率はほかの値の2倍になっている
      • (これは実際に自分の手で試してみたい)
  • AES(Advanced Encryption Standard)
    • 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもの
    • 入力は128bit固定で、鍵長は126,192,256bitから選択する
    • 128bitじゃない平分の時は、128bitのブロック毎に処理する。
      • 128bitの倍数にならない場合、不足分はパディングする
      • このブロックの処理方法を「暗号利用モード」と呼ぶ
      • 暗号利用モードのひとつにECB(Electronic Codebook)モードがある
        • 常に同じ暗号化結果が得られる→同じ平分のブロックが同じ結果になる、という欠点がある
        • AESに限らず、ブロック暗号でECBは利用せず、CBC(Cipher Block Chaining)等の他のモードを使う方がよい
          • CBCモード
            • 一つ前の暗号分を事前にXORで混ぜる
            • 最初のブロックはランダムな初期化ベクトル(IV)を混ぜる
  • RSA
$ openssl genrsa 192 | openssl rsa -modulus
...
Modulus=AAAA
$ msieve -e -v AAA
  • 実際に鍵長を指定するときは、2048bitよりも大きい長さを用いるほうがよい
  • RSAによる暗号化・復号化は処理(計算)が重いので、主に鍵共有、デジタル署名に使われる(「ハイブリッド暗号方式」と呼ばれる)

  • DH(Diffee-Hellman key exchange)鍵交換

    • RSAでAESの共有鍵を共有→データ通信という場面で、誰かが通信データ(AESで暗号化されたデータ)を全部集めており、かつRSA秘密鍵が盗まれてしまったら?
      • 鍵共有時のデータが復号化できるため、共通鍵がバレる→これまでのデータが全て復号化されてしまう可能性がある
    • DH鍵交換を用いると、共有鍵のデータを送受信せずとも鍵を共有できる
      • (なので、RSA秘密鍵が盗まれたとしても、送受信されていない共有鍵はバレない→データの復号化は不可能、という理解でよいのかな?)
    • DH鍵交換じたいは正確に言うと暗号ではなく、鍵共有プロトコルと呼ばれるもののひとつ
    • 特にセッション毎に鍵を換える場合DHE(Ephemeral)と呼ぶ。また、この鍵管理の概念を"PERFECT FORWARD SECURECY"と呼ぶ。
  • TSL/SSL暗号化スイートの読み方

    • TSL/SSLで使用する暗号の組み合わせを「暗号化スイート」と呼ぶ
    • 例として暗号化スイートが"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"の場合、以下の意味になる
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
鍵共有                 → ECDHE
通信相手の認証         → RSA
データそのものの暗号化 → AES_128_CBC
メッセージの改竄見地   → SHA1

Metasploitでペネトレーションテスト

まとめ

Security Casual Talks 2014#2(すみだセキュリティ勉強会)のメモをまとめてみました。正直、スライドが公開されているのでメモをまとめる必要性は低いと思っていました。しかし、自分の理解をメモにまとめるのだと考えると、スライドを見返したりする必要があり、なかなか勉強になります。

暗号の話は学生時代に習った内容の復習的なところが多いものの、すっかり忘れていたりする項目もありました。今回の勉強会を元に知識をキャッチアップできればと思います。

BaaS(Backend as a Service)勉強会に参加してきました

BaaS(Backend as a Service)勉強会に参加してきました

BaaS(Backend as a Service)勉強会に参加してきました。

勉強会の参加者のツイート内容は#BaaS (Backend as a Service) 勉強会のつぶやきログにてまとめられています。

以下のメモについては私のメモをまとめただけなので、内容に間違いがある可能性にご留意ください。

そもそもBaaSとは?(予習)

初めて聞くキーワードに関する勉強会の場合、予習しておかないとメモをまとめるのに苦労するため、あらかじめBaaSについて簡単に調べてみました。

BaaSとは

アピアリーズさんのBaaSとはの解説を引用すると、「モバイルアプリサービスの運用に必要な汎用的なサーバ機能を提供するクラウドサービスの一形態です。」とのこと。

  • モバイルアプリの開発はデバイス側(フロント側)、サーバサイド側、サーバの構築がセットになっている。
  • デバイス側で完結するアプリは殆ど例を見なくなっている。
  • モバイルアプリのサーバ構築では、以下の2点に頭を悩ませることになる。
    • スケーラビリティ
    • アイドルコスト(遊休コスト)

スケーラビリティとアイドルコスト

  • 自前でのハードウェア確保の場合
    • スケールアップの度にサービス停止が発生する。
    • 場合によっては新しいサーバへデータを移行する必要がある。
  • スケールアップの面倒がないように、始めから高性能なサーバを用意すると、今度はサーバが遊んでいる(アイドルコストが大きい)状態になってしまう。
  • スケールアウトの場合、入念な設計と高度なサーバ管理技術が必要であり、実施は容易ではない。

そういえば、WEB+DB PRESSのVol.78の特集記事「DMM.com開発ノウハウ大公開」でもDMM.comさんのサーバ機器の変遷(サーバラックの追加・増設やデータセンターの移行)が解説されていました。

これらの問題への解決方法としてクラウドサービスがあり、その一つとしてBaaSがある、という話のようです。

○aaS

また、BaaS以外にも○aaSと名前のつくサービスがあり、以下のような分類となっています。

図で表現すると、利用者側から見た○aaSの分類は以下のようになります。

f:id:furandon_pig:20140604213403p:plain

これらを踏まえてBaaS勉強会に参加してみました。

HTML5 Japan Cupについて

  • 発表者は白石俊平(html5j管理人)さん。
  • 発表スライドは以下のURLで公開されています。
  • html5jについて
    • 「日本が、世界のWebシーンをリードする存在になる。」を目標に掲げている。
    • わりと規模が大きくなってきた。
    • html5jのサブコミュニティ→14個くらいある。
  • 現在開催中のHTML5 Japan Cup 2014のお話。
    • Webデザイナー/Webエンジニア向けの、クリエイティブコンテスト。
    • HTML5 Japan Cup 2014のすごいところ。
      • 賞金すごい
      • 賞(と提供企業→42団体)すごい
      • 会社が開発者にコンタクトを取りたがっている→お仕事につながるかも、とのこと
    • 盛り上がる(希望)
    • 6/30まで作品製作期間、この間に作品をどんどん投稿して欲しいとのこと

HTML5開発者にとってのBaaS活用のメリット

  • 発表者は安藤幸央さん
    • そもそもBaaSとはどのようなものか?
    • サーバサイド開発用の言語が苦手な方でも、BaaSならサーバ機能を使った アプリを作れる!
  • 発表スライドは以下のURLで公開されています
  • BaaSの中にはサービスの中にはMBaaSに特化したものもある,
  • クラウドサービスを実際の天候に見立てた場合、晴れだけでなく、雨の日もある。これを避ける「傘」がBaaSであると考えている
  • 例えばfacebookのようなサービスをつくろうと考えた場合
    • フロントエンドだけでなく、サーバも作り込む必要がある(フロント-サーバの連系)
      • フロントは自分たちで作成し、バックエンドは既存のものを組み合わせて使おう、という考え
  • サービスを作る際に必要な機能
    • 認証、データの保存・管理、プッシュ・メール通知、アクセス解析SNS連系、課金、etc...
    • 基本的には定番の機能で、その都度(定番の機能を)作り直す形になる
      • バグ回避の観点からも、既存の実装済み機能を使いまわす方がよい
  • facebookとParse
    • 最近のBaaS関連のニュースで大きかったトピック
    • facebookが"Parse"というBaaSの会社を約84億円で買収した
    • 無料+使いやすくしたために、買収後の利用者が10倍になった
  • BaaS活用の観点
    • スピード、(人的)リソース、コスト、の3つが重要
    • スマホアプリ開発時の割合
      • 開発する前に設計
      • 開発→サーバ、クライアントの開発割合は50%/50%
      • BaaSを使うとクライアント側の開発に集中できる
  • BaaSの利用が向く開発
    • 開発エンジニアが少ない場合
    • バックエンドエンジニアのリソースが割けない場合
    • 一人で開発する場合
  • BaaSの利用が向かない場合
    • 開発メンバが多い場合orスキルの高いメンバが多い場合はBaaS不要
    • バックエンドエンジニアのリソースが確保できる場合
    • 一般的な機能の組み合わせでできるサービスを構築する場合
      • (BaaSを使うまでもない、という話?)
  • Instagramの開発エピソード(BaaSが無かった頃のサービス開発エピソード)
    • Instagramはクライアントサイド畑のエンジニアが2人で開発したサービス
    • そのため、サーバ側は手さぐりで作っていた
    • 最初の日に25000人が登録、一気に大量に使われるようになった
      • favicon.icoをサーバに置かなかったことで、「faviconが無い」というログで溢れかえってしまった
      • こういう失敗が無いようにBaaSを活用すればよいと考えている
  • 最適なBaaSを選択
    • BaaSベンダを選ぶ際の基準に関する話
    • (発表者のスライド(38枚目)を見てもらった方が良いかも...)
  • BaaSのデメリット
    • セキュリティ→ベンダが対応してくれる
    • ベンダロックイン→二つのサービスにまたがって動作させる、OSSのBaaSを活用
    • ダウンタイム→あきらめと、落ちる前提でサービスを企画する
    • テスト切り分け
    • 価格設定
    • 機能が足りない

現役BaaS開発者パネルディスカッション

  • モデレータは冨田慎一(株式会社マッシュマトリックス)さん
  • BaaS開発者として以下の方々が登壇されていました(敬称略)
    • 荒川義弘(株式会社アピアリーズ)さん
    • 石塚進(Kii株式会社)さん
    • 野田雄也(ニフティ株式会社)さん

各社のBaaSの特徴紹介の後、モデレータの方から出されたテーマを元にBaaS開発者の方が話すという内容でした。その後、参加者からの質疑応答タイムとなっていました。

モデレータの方から出されたテーマを元にBaaS開発者の方が話した内容

  • (テーマその1.)日本のBaaS市場、これから伸びてゆく?盛り上がってゆく?そして、ぶっちゃけ儲かっている?

    • アピアリーズさん
      • IIJさんと提携してからお問い合わせをいただくようになったので、勝手に盛り上がっていると考えている。
      • まだ儲かっているとこまでは行っていない。
    • Kii株式会社さん
      • 日本で盛り上がっているかと言われるとまだまだ
      • ただ、隠れて興味を持っている人・会社は多いようで、しずかに注目されていると思う
      • 儲けはまだまだだが、これからだぞというかんじ
    • ニフティ株式会社さん
      • 儲けはまだまだ
      • イベントに出典して問い合わせをいただいているので、企画で盛り上がってきていると思う。
      • 具体的なお問い合わせも多くなっており、(BaaSの盛り上がりは)これからだと思っている
  • (テーマその2.)海外のBaaSベンダーは40社以上あり乱立している。大手の会社もBaaSやろうとしており、海外勢をどう考えている?海外と自分たちのBaaSベンダの違いは何であると考えているか?

    • アピアリーズさん
      • 海外/国内の違い→日本語対応、サポート。
      • 日本国内でワンストップになるのが強みだと考えている。
    • Kii株式会社さん
      • モバイルでもローカルに特化するのも意味があると考えている。
      • マルチサイト対応しているので、日本で作って中国に持っていけるのは自分たちの強みだと考えている。
    • ニフティ株式会社さん
      • 一番大きいのはサポートが日本であること。
      • 企業で使おうと思うと早い時間で日本語でレスポンスがあるのはかなりのメリットと考える。
      • (データセンタが日本にあるので)レイテンシが低いのもポイント
        • が、海外からのレイテンシが大きくなるという逆の見方もあるとのこと
  • (テーマその3.)HTML5jカップでBaaSのからみで→MBaaSでモバイル、ネイティブアプリ/Webアプリという文脈でモバイルに限らずWebアプリを考えたときにBaaS利用はありえる?BaaS利用でHTML5はこれからどうなる?

    • アピアリーズさん
      • WebアプリでBaaSは十分にアリだと考えている。
      • アプリKeyが無くてもOKにしている、WebアプリとBaaSは親和性が高いと考えている。
    • Kii株式会社さん
      • アリだと思う。元々BaaSに'M'が付くのはMobile(の開発)が特殊だったから
      • Ruby on RailsとかはBaaSで置き換えてもよいのではと考えている。
      • ネイティブ/Webアプリの文脈→前者はbaaSある。
      • WebアプリはBaaSが取りに行ってないし、やろうという人もいない。我々としても後者にチャレンジしたいと考えている。
    • ニフティ株式会社さん
      • JavaScript SDKでキー書き出す。
      • セキュリティはsignatureチェック、機能制限をかけようという考えている。
      • PhoneGap→ブラウザオンリーでアプリが作成できるという開発環境。ライトなアプリはこれで十分。
  • (テーマその4.)今回の参加者からアンケートを取ったらサーバ系の人が多い。インフラ/DB/ミドルの構成教えて

    • アピアリーズさん
      • 概ねJavaで作っている。場合によってPHP,JavaScript
      • 基盤はIIJさんのGioクラウドを使わせていただいている。
      • DBまわりはメインでMongoDB。
    • Kii株式会社さん
      • 基本的にインフラはAWS、中国だけ別。
      • メインはJavaPython,NodeJS、ストレージは普通のRDBだったりMongoDBだったり。
      • ロックインされたくないので差し替え可能なように作っている。
    • ニフティ株式会社さん
      • IaaSはニフティクラウド
      • 開発言語はかなりの部分がJava
      • ミドルDBはMongoDB。
      • 他社様の構成も弊社と似ているのではと考えている。
  • (テーマその5.)言ってみればBaaSってサーバエンジニアをいらなくする技術なのでは?そう考えた時にサーバエンジニアのキャリアパスは?

    • アピアリーズさん
      • BaaSが出てきてサーバエンジニアがいらなくなることは無いと思う。
      • ラッキングやスイッチング部分では不要。構成を考える部分では必要。
      • BaaSでも通信、トランザクション、想定される負荷の検討しだいでは(レイヤが変わってくるけど)必要だと思う。
    • Kii株式会社さん
      • 今後はバックエンドとフロントエンドエンジニアは分かれてゆくと思っている。
      • AWSで同じ話が出ている。
      • オンプレミスデプロイや他サーバとの連系を考えるとサーバエンジニアはこれからも必要。
      • シビアなビジネスロジックやパフォーマンスが要求されるようなコストが厳しい場面ではサーバエンジニアが必要だと思う。
    • ニフティ株式会社さん
      • なくならないと思う。
      • BaaSを選ぶのはフロントエンドの人だけでなく、backendの人が逆にBaaSを選択してあげても良いと思う。
      • フロント側の知識を得ればフルスタックエンジニアに一歩近づく。サーバの知識は無駄にならない。
      • ゲーム系の顧客では(パフォーマンスの観点から)BaaS使わない顧客も多い。

質疑応答

  • Q1.BaaSを使ってmobile appを作ることを考えたとき、どういうアプリがBaaSに向いていると思いますか?

    • アピアリーズさん
      • 弊社のBaaSではキャンペーンアプリが多いという歴史があり、短期間、低コストであった。
      • ヘビーなアクセスがあるようなゲームは自前のインフラとか考慮したりする必要があるので向いてないと思う。
    • Kii株式会社さん
      • 我々が色々な企業さんと話すと、いろいろなジャンルに向いていると思う。
      • BaaSはテクニカルじゃない部分がある。
      • アプリを複数持つとバックエンドを共通化したくなる。
      • そのため、アプリではなく業務として共通化したいのでは。
    • ニフティ株式会社さん
      • 私もなんでもできると思っている。
      • IaaSと同じでun-controllableなものをどうするかという点ではBaaSも同じ。
      • un-controllableな箇所を許容できるならもつ、そうでないなら持たない。
  • Q2.将来どこで他社と差別化(機能、料金とか)を図ろうと考えていますか?

    • Kii株式会社さん
      • 弊社はマルチサイト、海外展開が差別科要因だと思っている。
      • 機能で差別化は難しい。使ってもらわないと差別化にならないから。
      • 開発者の不満感に反応して(機能が)進化してゆくと思う。
      • どのBaaSを選ぶかはぶっちゃけ好みだと思う。使って行くことで自然にノウハウがたまると思う
    • アピアリーズさん
      • 正直BaaSは汎用的な機能を安価に使えるように、が出所なので差別化難しいと考える。
      • IIJのお客様から業務系アプリのお話をいただくことが多い。
      • 今後の展開は汎用機能突き進む側とエンタープライズ向け特価の2つを進めると思う。
      • エンタープライズ向けが差別かの点だと考えている
    • ニフティ株式会社さん
      • 差別化難しいよね。
      • (弊社の場合)IaaSから持っているのは強みだと思う。
      • スマホアプリのノウハウを持っている会社との連合軍で進められるのが強みだと考えている。
  • Q3.(Kii株式会社さんはオンプレを提供しているが)なぜオンプレしようと思ったのですか?また、他の会社はオンプレやる予定はありますか?

    • アピアリーズさん
      • オンプレはOEMで提供を検討している会社が数社ある。
    • Kii株式会社さん
      • オンプレに踏み切った理由→エンプラ向けの需要があるから。
      • 米国のBaaS業者もエンプラに行っている。
      • 既にあるエンプラ(MEEP)を喰いに行っている。
    • ニフティ株式会社さん
      • オンプレの話は問い合わせが多々ある。エンプラ系で多い。
      • が、現状はできていない。検討は引き続き行っており、うまい方法があるか考えている。

飛び入りLT

質疑応答の後、自作BaaSサービスを作成された方の飛び入りLTがありました。福岡からの参加(!)とのことでした。

  • 発表者は@nobkzさん
  • Milkcocoaという自作BaaSサービスの紹介
    • エンドユーザがWebアプリを作れないか!という観点で作成した
  • あわせてflowerというグラフィカル言語の紹介
    • Raspberry Piの上でも稼働するようです

まとめ

BaaS勉強会のメモをまとめてみました。今回は予習をしていったので楽にメモをまとめられると考えていたのですが、やはり四苦八苦してしまいました。メモを取りながら話のつながりをリアルタイムにまとめあげるという要領のよさが必要そうです...。