2016年5月27日金曜日

SeekGeeks投稿用テンプレートを作ることにした

SeekGeeksで取り組み中のプランで、SeekGeeksに投稿するときに添付するプレゼンスライドのジェネレータを開発しようと思ってたんですが、「ある程度形式が決まっていて」、「自由度が高くなく」、かつ「直感的に編集」できるようにしたいなぁと考えていたら、ふとあることに思い至りました。

それ、プログラム作らなくて良くね?


わざわざ「追加できるアイテムは○個まで」とか、「文字数は○○字以内」とか制約付きのプログラムを作るよりも、Googleスライドでプランの概要を説明する雛形を作って公開したらどうだろうと。それなら不要なページは自分のドライブに持ってきて削除してもいいし、逆にページの追加も簡単だし。そもそも世の中にはパワー○イントだのkeyn○teだの、Coolなプロダクトが溢れてるのにわざわざ自分で手作り感満載のツール作る必要なんてないよなーという結論になりました。

この「プログラム作らなくて良くね?」案件は割と多くて、手作業でやった方が速いことでもたまに頼まれて、時には自発的にプログラム組んだりすることもあるのですが、プログラミングもリソース使うので、勉強目的とかじゃない場合はできるだけ作らない方が良かったりします。
いろいろ複雑な要件言われたけど、実はExcelで開いて関数使えば解決!とか、隣の部署とちょっと情報共有したらその作業そのものが要らなくなった!みたいなこともあるので、心当たりのある方は「作らなくて済む方法」を模索しても良いかもです。

閑話休題。
そんなわけで、今はテンプレート用に架空のアプリアイディアを練っているところです。
まとまり次第Googleスライドで公開していこうかなと。パワ○とか他のツールの方が良いというアドバイスも頂いたんですが、SeekGeeksがブラウザで開くサービスなので、同じようにブラウザで完結できる方が良いかなと思い、第一弾はGoogleスライドでいこうと思います。

ただ、一点問題がありまして…
架空のアプリアイディアはある程度浮かんでるんですが、やはり架空なので若干力が入りきらないというか何と言うか。
どなたか、「資料に落とし込むほど出来上がってはないけど、漠然とこういうものを作りたい!というのはある」という方とかいらっしゃいませんかね?
それをお手伝いする代わりに、完成したスライドをテンプレートとして公開させて頂けたらすごく助かるのですが。
現在パートナー募集中ですのでよろしくお願いします。

2016年5月26日木曜日

docker pushしてみた

今月頭くらいからずっとDockerを習得しようと悪戦苦闘していたんですが、ようやく落ち着いたのでメモ。

過去記事は以下。
Dockerをインストールしてみた(Ubuntu, Mac)
DockerでWebサーバーを立ち上げてみた(Ubuntu, Mac)
Dockerでホストにあるディレクトリをマウントしてみた

改めて見返したらインストールから1ヶ月以上経ってたのか。
我ながら覚えが遅くて悲しい。。

とりあえず、今まで自分でChefのレシピ書いて作ってた環境をDockerで再現することは成功したっぽいです。
Dockerfileの具体的な記述については他のエントリでまとめようと思ってますが、試してみたいと思って下さった方はDockerをインストールの上、
docker pull seekgeeks/sgdevelopment
ってやるとDocker Hub(GitHubのDocker版みたいなやつ)に置いた私のDockerイメージをpullできると思います。
起動させるときは、
docker run -p 8080:80 -p 21223:3306 -it seekgeeks/sgdevelopment /bin/bash /tmp/init.sh
とかやるとnvmの有効化とかApacheとMariaDBの立ち上げとかが始まった上で起動します。
ソースコードをマウントしたい場合は過去記事を参照してください。

ちなみにコンテナにはApache+MariaDB、pyenv/rbenv/nvmなんかがインストールされてます。
各言語のバージョンはどれが最適かわからなかったので、Python2.7.11、Ruby2.2.2、Node.js4.4.4を入れてます。RubyとNodeは覚えやすいのでこのバージョンにしました。

先日Twitterで、Python興味ある、と言って下さった方がいらっしゃったので、それなら環境を簡単に提供できたらいいかなーと思ってDocker Hubにも挑戦してみた次第。
Vagrant+Itamaeでも同じことできますけど、Dockerの方がお試ししやすい感じがします。

Pythonやってみたい方もDockerやってみたい方も、良かったらpullしてみてください。
pullされた数とか見れるっぽいので古き良きインターネットのアクセスカウンタばりにワクワクします。

今後はDockerfileのエントリ書きつつ、並行してItamaeで同じことができるようレシピも書いたのでそっちのことも書いたり、勉強中サスペンドしてたSeekGeeksで取り組み中のプランなんかも進めていきたいと思ってます。

ちなみにDockerの使い方が正しいかはわからないです。。
何か違うぞって思ったら教えて頂けると助かります。
よろしくお願いします。

追記:
Windowsの方は下記ページが参考になります。
Windows10マシンにDocker Toolbox を入れて個人用の開発環境を作る
Win7で普通に動きました。
すでにVirtualBoxが入ってる方はインストールのときのチェック項目にちょっと気を付けた方が良いかもです。

2016年5月13日金曜日

エンジニアがプロダクト作りに参加する動機について考えてみた

以下、メモです。

SeekGeeksをたくさんの方に利用して頂くために何ができるのか、昨日ツイッターでいろいろ考えてみたので貼っていこうと思います。






ふと思いついてつらつらと書き綴ってしまったんですが、整理しておきたくてこの記事でまとめちゃいました。
何でこんなこと考えているかというと、SeekGeeksではプラン登録時にPDFのプレゼンスライドをプランナーに作ってもらうようになってるんですが、これけっこう負担だよなぁと思って、改善案を考えています。具体的なことは後日の投稿にて。
そのため、プレゼンスライドにどんな要素が必要かを検討したいなと。
  • プロダクトを考えている人がいるとして、それに協力したいって思うのはどんなときか
  • 要件ガッチガチのやること決まってるプロジェクトと、要件は未確定な部分が多くてこれから一緒に作っていこうぜ!なプロジェクト、どっちが参加したいと思えるか
  • 誰とやるか、何をやるか、以外に決め手になりそうな要素
この辺りがスライド作るときにどんな部分に力を入れるかを検討する要素になるんじゃないかと考えてます。
上記に関して、何かご意見頂けましたら幸いです。Twitter、Slackなどでご連絡頂けましたら嬉しいです。

2016年5月9日月曜日

SSLVerifyClientで痛い目にあった話

SeekGeeksをMacのSafariで見ようとすると、エラーが起きて見れない(NSURLErrorDomain)状態になっていたのを昨日解消しました。
ちなみにChromeでも、証明書選択ダイアログが出て、「OK」を押すとエラー、「キャンセル」を押すと表示されるって状態になってました。。
事象は認識してたんですが、一度キャンセルを押すとChromeを再起動するまで同じダイアログが出ないので気付けず。。
ツイッターで教えて頂いて、ようやく対応することができました。
不具合のご連絡、誠にありがとうございました。(私信)

さて、今回の原因なんですが、SSLのコンフィグで余計な一文を書いてしまってたのが悪かったようです。。
SSLVerifyClient optional
これがダメで、ここでoptionalにしちゃうとクライアント証明書の検証を行ってしまう場合があるそうです。で、optionalなので検証が行われないパターンもあるらしく、それで気付くのが遅れてしまいました。
解決するにはどうすればいいかっていうと、この一文を消すだけ。デフォルトがnoneなので、余計なこと書かなきゃ発生しない事象だったようです。

お恥ずかしい話、SeekGeeksでSSLもmod_wsgiも初めて使ったので、コンフィグ周りどうすればいいかわからず、ググってSSL+mod_wsgiの設定っぽいやつ探してきてコピペして、ググりながら直して…っていうのを繰り返してたんですが、コピペ元がoptionalになってたのでそのままになってしまったようです。。

※初めてのSSLですが、セキュリティのレベルには気を付けたいと考えており、こちらのサイトでセキュリティレベルの検証を行っております。A+評価を取れているので、完全とは言い切れませんがひと通りの設定はできております。ユーザーの皆様にはご安心頂きたく存じます。

コンフィグコピペって言うと、どこぞのラノベだと年齢不詳上司からドライバーでも飛んできそうな感じでヒヤリとしました。。
他にも何かお気付きの点などございましたら、ツイッターでもメールでもSeekGeeksのフィードバックフォームからでも、ご連絡頂けましたら幸いです!
よろしくお願いいたします。

本当にツイッターやってて良かった!!

2016年5月6日金曜日

Dockerでホストにあるディレクトリをマウントしてみた

昨日はDockerでWebサーバーを立ち上げてみましたが、このままではサイトの中身をいじくることができません。
ドットインストールではADDコマンドを使ってホストで作ったファイルをDockerのコンテナにコピーする方法を紹介していますが、それはちょっとめんどい。Vagrantのsynced_folderみたいにホストのディレクトリとそのまま同期してくれればかなり楽。というわけで、やってみました。

とりあえず適当なディレクトリを用意します。私はDropboxにディレクトリを作ってそれをマウントするのが好みです。まぁとりあえず今回はテストなので適当にホストでディレクトリを作ります。
mkdir mnttest
vi mnttest/index.html
ってやって、index.htmlを適当に作ります。
index.html
<html>
  Hello! Docker!
</html>
で、こいつを/var/www/htmlにマウントできればOK。

というわけで、docker runで-vというオプション機能を使ってみます。
docker run -v ~/mymnt:/var/www/html -p 8080:80 -d mydocker/httpd
これでブラウザでlocalhost:8080を叩くと、先ほどのindex.htmlが表示されるって寸法です。
ついでにホスト側でindex.htmlを編集して、ブラウザに反映されるかも試しましたが、問題無さそう。良かった。Vagrantのsynced_folderだと、Apacheのコンフィグいじらないと反映されなかったりするので同じような罠が無いかちょっとだけ不安でした。

ちなみにVagrantのsynced_folderは複数のディレクトリをマウントできるんですが、Dockerでもやりたいことがあるかもしれません。なので調べてみました。どうやら、-vは複数使える模様。なので、mnttest2ってディレクトリを作って、そっちに適当にファイルを入れて試してみました。
docker run -v ~/mymnt:/var/www/html -v ~/mymnt2:/tmp/mymnt2 -p 8080:80 -d mydocker/httpd
で、これをどうやって確認すりゃいいんだ?と悩むことしばし。起動中のコンテナに入るのってどうすりゃいいんだ?と。
それも調べました。どうもdocker execコマンドってのがあるみたいです。
docker ps
で起動中のコンテナのIDが取れるので、
docker exec -it <コンテナID> /bin/sh
ってやったらrootでコンテナの中に入れたので、lsコマンドとかでtmpディレクトリ内に新しくmymnt2ってディレクトリがコンテナ内に作られて、中身もホストのものと同じになっているのを確認できました。

めでたしめでたし。

(あとがき)
これはさすがにLinuxとMacで挙動に違いはないだろうと思ったので、Linux Mintだけで実験しました。
ちなみに参考にさせて頂いたサイトはこちら。ありがとうございました。
Dockerにホストのフォルダをマウントしたい! - Qiita
コンテナ内でのテータ管理 - Docker User Guide - Qiita
CoreOS で起動中のコンテナの中に入る - Qiita
こう見るとQiitaってすごいね!ね!!
いつもお世話になっております。

今後は自前のChefのレシピを見ながらDockerfileをカスタマイズして、Dockerに同じ環境を構築していきたいと思います。

2016年5月5日木曜日

DockerでWebサーバーを立ち上げてみた(Ubuntu, Mac)

以前のエントリでDockerをインストールしてみたんですが、それからずっと放置してたので、GWの機会にちょっといじってみようかと思い立ちました。
SeekGeeksの開発環境はVagrant+Chefで構築したんですが、とりあえずDockerでも同じような環境を構築することを目標にしてみました。
なのでとりあえず第一段階として、ドットインストールとか見てDockerにApache入れてブラウザで表示することにチャレンジ。

Dockerは、pullしてきたイメージからコマンドラインでいじくってカスタマイズして、完成品を再度イメージ化して使い回すこともできるみたいですが、個人的にはChefでプロビジョニングする感じでセットアップ内容をテキストで残しておきたい。そういうときはDockerfileというのを作ると良いらしい。
で、Dockerfileはこんな感じになりました。お作法はググればすぐ見つかると思うので割愛。

<Dockerfile>
FROM centos:centos6
MAINTAINER name surname <address@domain.com>
RUN yum install -y httpd
EXPOSE 80
CMD ["usr/sbin/httpd", "-D", "FOREGROUND"]

とりあえずLinux Mintで。


ひとまず普段使いのUbuntu系軽量OS、Linux Mintでやってみます。
まずはイメージのダウンロード。
docker pull centos
で最初やろうと思ったんだけど、これだと以降のコマンドで失敗するみたい。参考URLはこちら。
Dockerのcentosでapacheインストール失敗する。rpmがうんちゃらとか言われる

回避するには最新のCentOSじゃなくて、CentOS6を使うと良いらしい。なので、
docker pull centos:centos6
次にDockerfileをビルドする。コマンドは以下でいいらしい。(Dockerfileがあるディレクトリにcdで移動してる前提)
build -t mydocker/httpd .
うまく作れてるかは
docker images
で確認できます。
で、起動するには
docker run -p 8080:80 -d mydocker/httpd
 これで、ブラウザを開いてlocalhost:8080と打つと、Apacheの初期画面が表示されました。

次はMacで。

同じ感じでMacでもやってみました。
docker pull centos:centos6
build -t mydocker/httpd .
docker run -p 8080:80 -d mydocker/httpd
で、ブラウザでlocalhost:8080って打つと、「この画面は表示できません」的なエラー。
なんで??と思ってググったら、Macはboot2dockerっていうVirtualBoxを経由してDockerを使う形式らしく、
Docker <--> VirtualBox <--> Mac
って感じで二重にポートフォワードする必要があるらしい。やり方は、
boot2dockerのポートフォワードで一瞬ハマる - とっしぃのTech Memo
とかに載ってたので、これ使えばできそう。
でも、よく考えたら別にApacheにアクセスさえできれば良くて、localhostである必要はまったくなかったので、
Mac OS X へのDockerのインストール方法 - Qiita
を見ながら以下のコマンドを実行。
docker-machine ls
そしたら、192.168.100.xとかいうIPアドレスが出てくるので、ブラウザで<出てきたIPアドレス>:8080を入力。無事Mintと同じ画面が表示されましたとさ。

==========
次回はホスト側のディレクトリとDocker上のディレクトリを共有する方法を調べようと思います。