Perlがくしゅう帳(Rubyも)

プログラミングの勉強会の参加記録や学んだことなど。 twitter ID : @tomcha_で活動しています。 最近は主にPerl関連の勉強会やコミュニティに参加しています。移転前のブログはこちら->http://ruby.doorblog.jp/

Perl入学式卒業生としてYAPCで初トークしました ~YAPC::Fukuoka2017感想ブログ~

6月30日、7月1日とYAPC::Fukuoka2017 HAKATAに前夜祭から乗り込参加してきました。

今回いつものYAPCと違うのは、なんと、応募したトークがまさかの採択となり、人生初YAPC登壇となりました。
あこがれの赤Tシャツ&白ネックストラップです!名誉と伝統がある場なので、とても感慨深い。

f:id:tomcha0079:20170707221531j:plain:w400

前夜祭当日

6月30日は早めに博多に乗り込み、お昼ごはんに九州グルメを堪能。その後は前夜祭開催までカラオケボックスに篭ってトークの練習とスライドの調整を。
前週に予定外の風邪を引いてしまい、スライド作成->トーク練習->スライド調整->トーク練習…のルーチンが1週間ずれ込んでしまい、まさかの現地入りでの練習となってしまいました。全然野菜とか美味しいものめぐりしたかった…

博多の街の印象は、物価が安くて食べ物が美味しい街でした。
胃袋の限界もあり、食べたかった物全部食べきる事はできませんでしたが、また旅行で行くぞ!って思いました。

前夜祭は早めに会場入りし、同窓会のようにYAPCで会う色んな地域のPerlMongerと挨拶したり、いつもはTwitterやSlackのアイコンでしか会話した事のなかった人とお話できたりワイワイと楽しい前夜祭でした。

前夜祭では、ネタ感溢れるsago35さんのLTが、技術の話にネタも仕込んであって、これぞLTって感じで盛り上がって面白かったです。 sago35.hatenablog.com

また、若さの勢いあふれるAnaTofuZさんのLTも印象に残りました。若いのにガンガンAcmeモジュールを作っててすごいなーと。

前夜祭のあとは、今回のYAPC::Fukuokaのスタッフでもある、日下部さんと信者会の方々と会場近くの居酒屋で二次会へ。
「はじめまして」「あー、あのアイコンの◯◯さん!、どうもどうも!」の流れは毎回面白いですね。
TwitterやSlackでコミュニケーションを取っていてもはじめましての方々と、今回の福岡でもたくさん顔が繋がり、ワイワイ盛り上がったり。

YAPC::Fukuoka 当日

f:id:tomcha0079:20170701094328j:plain:w500

そして7月1日本番当日。
普段会社に行くよりも遅いので楽々起床成功。
現地入りしてYAPC::Kansaiで一緒にスタッフをしたコアメンバーの方々とも挨拶をしたり、声をかけて頂いたり。5年前の初めてYAPCに行った時から比べて、とても知り合いも増えました。
この日は現地に到着してからもスライドを少し微修正したり。発表が午後一番だったのですが、こんなにオープニングやら午前中のトークやら頭に入らないYAPCは初めてでした。

そして昼食をパスして午後一番、いよいよトークの時が。予想以上に会場が広く、そして時間が迫るにつれお客さんの席も埋まりだして緊張はピークに。
トークは練習をしていたとはいえ、始まってしまえばあっという間に予定時間。ギリギリ少し時間足らずでしたが、これは伝えようと思っていた重点ポイントは伝えることができました。
正直、自分のトークが採択された時からYAPCの場での発表に相応しいのか不安しかなく、それでも選ばれたからには精一杯失礼の無いようにと頑張りましたが、トーク中もトークが終わっても良かったのか悪かったのか、不安はありました。
懇親会の時に、 @xtetsuji さん、 @karupanerura さんに、トーク良かったよと感想を頂いたとき、あー発表して良かったなとホッとしました。
エンジニアの方達は、決してお世辞を言う方ではなく、良いもの良い悪いもの悪いと正直に述べられる事は分かっていたのでとても嬉しかったです。

当日のスライドはこちらです。

t.co

さて、自分のトークが終わってからやっとトークも耳に入るようになりました。

その後の懇親会も、懇親会後の二次会も色んな人とお話ができました。

懇親会

f:id:tomcha0079:20170701221221j:plain:w400

懇親会ではPerl入学式の @papix 校長と、今回の自分のトークは若い人たちにバトンが繋がるトークを心がけた事と、自分は @papix さんから5年前にPerl入学式に参加してバトンを受け取ったからこそ、今この場に居るといった事を話しました。 @papix さん自身も、ファームノートさんからYAPC参加の旅費支援というバトンを受けたから今があると言ってられたので、Perlのコミュニティは次から次へとバトンを繋げていく素晴らしいコミュニティだなぁと、参加する機会があって良かったと改めて感じました。

次は若手がとても勢いのある沖縄、YAPC::Okinawaですね。
家庭内稟議は通ったので絶対に参加するぞ!という意気込みでとても楽しみです。

トークを応募した時の話は、何か機会があればまたどこかで、感想ブログはこのあたりで締めたいと思います。
行ってよかった、楽しかった!スタッフの皆様、ありがとうございました && お疲れ様でした!

YAPC::Fukuoka で「未来のプログラマー達へ ~Perl入学式卒業生から~」というタイトルでトークします

Perl入学式in大阪でサポーターをしているTomchaです。

実は私、仕事はITとは全く無関係な一社会人です。
2012年2月、Perl入学式の生徒としてプログラミングを学び、趣味でプログラミングをしています。
use strict;の書き方を一から教わる初心者からのスタートしましたが、

なんと、今回YAPC::Fukuokaでトークをする機会を頂きました。

これからプログラミングを初めてみたい方や、プログラミングに興味がありつつ、どう学んで行けばよいか分からない方など、初心者の方にPerl入学式OBとしての経験を、そして非エンジニアの視点でお話ができれば、そして何かヒントを掴んで頂ければと思っています。

おそらく、YAPCの中で最も初心者をターゲットとしたトークだと思いますので、初心者の方やPerl入学式受講中の方、もちろんそれ以外の方にも聴いていただければ幸いです。

yapcjapan.org

Acme大全への道

こんにちは、Perl入学式in大阪でサポーターをしている @tomcha_ です。

www.perl-entrance.org

趣味でPerlのプログラミングを始めて早6年。
なんとなく、ちょっとしたコードを書いている毎日ですが、PerlMongerになったからには大きな憧れってありますよね。

そう、これです

f:id:tomcha0079:20170602223101j:plain:w500

Acme大全!

いつの日か、自分の書いたモジュールがAcme大全に載ってたらカッコイイな〜と、

今までは見る側でしたが、入学式の講師予習をしている時に、ふとモジュールを思いついたので、勢いに乗っかって作ってみようと思いました。

まずはモジュールの紹介よりも先に作った手順などを紹介します。

やったこと 手順

1. Minillaのインストー

Acme大全に載るには、CPANAcme::で始まる名前空間に自作モジュールをアップする必要があります。
CPANにアップするモジュールには、色々とお作法がありますが、その雛形を簡単に作ってくれるモジュールが、Minilla です。

metacpan.org

まずはMinillaをcpanからダウンロードしましょう。

cpanm minnilla

2. minil new

Minillaのインストール 自作モジュールを作成するために、ローカルのパソコンの任意のディレクトリで、以下の新規作成コマンドを叩きます。

minil new Acme::モジュール名

ここでミソなのは、今回作るのは憧れのAcmeモジュールなので、モジュール名の前にAcme::をつけます。
その他、色々な名前空間でモジュールを作るときは、適宜応じた名前と :: で区切って指定します。
すると、 :: で区切った通りにディレクトリ、子ディレクトリも自動的に作ってくれます。超便利。
Hoge.pmというモジュールを作るなら、

minil new Acme::Hoge

とします。

3. コードを書く

さあ、オリジナルモジュールを作りましょう!
あ、その前に編集前の状態で git commt しておきましょう。
そして、ディレクトリの中に lib というディレクトリがあり、その中の モジュール名.pm を編集していきます。
通常はサブルーチンを書いていく感じになりますね。そうすると、作ったモジュールを読み込めば自作サブルーチンが呼び出せるようになります。
また、__END__以降の行の部分のコメントを編集して、READMEの内容を作っていきます。ここに書いておくと、この後のコマンド操作でREADMEファイルをよしなに作ってくれます。コピペで使い方がわかる、SYNOPSYSも丁寧に書いてみましょう。

4. Minil test

モジュールの中身が実装できたら、モジュール名のディレクトリ直下で、テストを実行して確認します。コマンドは、

minil test

です。デフォルトでは、自分の書いたモジュールが読み込めるかどうかのテストがデフォルトで書かれています。
まずはこのテストが通る事を確認して、その他テストも書いてみましょう。

5. Minil releaseの前に、pauseの登録

実装できた!テストも通った!さあ、リリースだ….のちょっと前にしておく事があります。
CPANにモジュールを上げる事になるので、先にCPANに自分のアカウントを作っておく必要があります。

https://pause.perl.org/pause/query

PAUSEというサイトで登録するのですが、こちらのブログ記事で詳しく書かれています。

blog.livedoor.jp

今回、大変参考にさせていただきました。感謝。

6. cpanアカウントの設定

PAUSEでアカウントを作ったら、アイコン画像などもう少し詳しいプロフィールを設定します。
プロフィールはmetacpanというサイトで設定します。

Search the CPAN - metacpan.org

まずはTwitterGithubのアカウントなどでサインインし、Accountメニューからidentitiesを選び、先程作ったPAUSEのアカウントと紐付けます。 f:id:tomcha0079:20170602224550p:plain:w500

そして、profileページでアイコンや自分のブログなど、プロフィールを書きましょう。

7. リリース準備ファイル

ホームディレクトリに.pauseファイルを作り、そこへPAUSEアカウントの情報を書き込みます。

touch ~/.pause chmod 600 ~/.pause

.pauseの中身は、

user username
password userpassword

(もちろん、自分の)を書きます。

8. Acme名前空間の再確認

CPAN名前空間での整理やテスト文化など、素晴らしいエコシステムが整った公共の場です。
まずはCPANの流儀にしたがい、自分の作ったモジュールがのディレクトリ名がAcme-Hogeとなっているか、llibディレクトリの中のAcmeディレクトリの中にファイルが置かれているか再確認しましょう。

さあ、ここまで来ればあと少しです!

9. リリース

モジュールをCPANにリリースです!

minil release

最初は何度かファイルをアップするためのCPANモジュールが足りない!と怒られました。
その都度、cpanm でインストールして、すべてのアップロード用モジュールが揃えば自動的にCPANにモジュールがアップされます!

作ったAcmeモジュールと今回はまったこと

さて、今回私が作ったモジュールはこちらです。

metacpan.org

どういうモジュールかというと、Perl入学式では一番最初に"Hello, world\n"と画面に出力するプログラムを作ります。
なので、Perlという言語のスローガン、TMTOWTDI “There’s More Than One Way To Do It.” “「やり方はひとつじゃない」”
に習って、教科書とは違うやり方の"Hello, world"のモジュールを作ってみました。

こんな単純なモジュールですが、実はテストでちょっとはまりました。
モジュール内のprint文、最初はシングルクォートで囲っており、改行しない文字列を出力させてました。
すると何故か、デフォルトのモジュール読み込みテストがコケる!
丁度Perl鍋という勉強会で作っていたので、周りの参加者に見てもらい、テスト単体とかでも試した結果、どうやらテスト時に"ok"で始まるテキストが帰らないとテストがコケる用で、テストの返り値文字'ok'の前に'Hello,world'の文字が改行せずにひっついていた為、'ok'を認識してくれずテストがコケていました。
Perl鍋と参加されていたPerlMongersにも感謝。
Perl鍋は不定期で平日木曜日のよる、大阪は梅田で絶賛開催しています。

perlnabe.connpass.com

出力文字列をダブルクォートで囲い、きちんと改行して、なんとかテストが通りました。

めでたい!念願のAcme大全に載れるはず?!
今年も出版されるのを願ってます!

ちなみに、こういうもくもく会を主催してます。(宣伝)

naniwaperl.connpass.com

YAPC::Kansaisaka 2017でコアスタッフをしました

2017.3.4 YAPC::Kansai 2017 Osaka で、コアスタッフとしてお手伝いをしてきました。

大規模カンファレンスにがっつり中からお手伝いするのは今回が始めての経験でした。 そこに至った経緯であるとか、YAPCはへの想いなどの諸々の話はまた別の機会にするとして、開催前、開催当日、後日の感想を書きたいと思います。

開催前

企画段階の準備や打ち合わせは、遠方だったり仕事や学業で場所も時間帯もバラバラでなので、SlackでのチャットコミュニケーションとGithubのissueでのタスク管理、GoogleDriveによるデータ共有などのツールを駆使して進めていきました。
私自身が本業はITとは全く関連の無い仕事をしているので、いずれも「とりあえずアカウントを作っただけで実際に使った事がない」ツールがほとんどで、最初は恐る恐る使い方を学ぶところから始まりました。ツールの便利なところが知れた事はとても良い経験になりました。また、逆に、チャットだけでは意思疎通の難しい部分もわかり、普段何気なく顔を合わせて話したり会議している場の有り難さも分かり、とても良い経験になりました。
また、YAPCは何度か参加していましたが、思っていた以上に決めることが多くびっくりしました。歴代スタッフの方々への尊敬と感謝を再認識しました。

前日準備

個人的には発注関係をメインに担当していたのですが、前夜祭に無事発注した商品が到着してほっとしました。
ノベルティの詰め込み作業はあっという間に終わった印象です。スタッフ全員、モチベーションがMAXだったからでしょうか。
また、たこ焼きを◯万円分買うという、人生初の貴重な経験も。
準備終了後は晩餐会&&締めの鴨南蛮を堪能しました。美味しかった!

当日

当日はメインホールA会場のタイムキーパー担当だったので、遅刻しない様に早めに現地に到着してコメダでモーニング。前日なかなか寝付けなかったので睡眠時間は2時間くらい。

朝会場に到着して、がらんとしたホールに入った時はそうでもなかったですが、ぱらぱらとお客さんが集まりだし、@941さんが来られたのを見かけて「おー、遂にYAPC開幕だー!」とYAPC感が一気に高まりました。何気にブログの写真にも写っていて感動。

A会場ではトークを聞きつつ、メインゲストのお二方、スペシャルコンテンツに温故知新トークなど興味深い話がたくさん聞けました。
スタッフにはお昼ごはんに豪華なお弁当が出ました。

f:id:tomcha0079:20170304130900j:plain:w500

大きなトラブルも無く、いや、プロジェクターが止まりかけたっけ?あの時は焦った焦った。
全般的には進行もスムーズに進みましたが、司会のかるぱさんの補助が出来てなかったなーというのが自分の反省点。
一日があっという間に終わり、その後の撤収もダダダダーッと皆で片付け。大人の文化祭なノリで全てが楽しかったですね。
今回は懇親会会場の広さや時間の都合もあり、スタッフは懇親会には出られず、色んな方々とお話が出来なかったのが残念でした。
ゴミの片づけやらなんやら終わって、スタッフ打ち上げは21時頃からになったかな?達成感もあり、とにかく、ご飯とお酒が最高に美味しく感じました。

f:id:tomcha0079:20170304210805j:plain:w500

f:id:tomcha0079:20170304214348j:plain:w500

このビールの味は一生忘れられないですね!

終わってみて

今回始めて大規模カンファレンスのコアスタッフをやってみて、YAPCが楽しかったのはもちろんですが、本業の仕事をしているだけでは経験できない事や、色々な方とお話できたり繋がりが出来て

コアスタッフやってめっちゃ良かった!

それにつきますね。

JPAの方々、コアスタッフの仲間や当日ボランティアの方々、ありがとうございました。

自分も含め、皆さん本業が忙しい中、楽しいイベントにする為にそれぞれが出来ることをする、まさにOSSの精神だなと感じました。
OSSに直接的に貢献する事は難しくても、何かの形で恩返し出来たかな?と思っています。
スタッフ業は遊びとはまた違うので、大変な部分ももちろんありますが、得られるものも沢山あるので少しでも興味を持ったなら、皆さん是非やってみてはどうでしょうか。

そしてスポンサー企業様、ゲストの方々、スピーカーの方々、ご来場の方々にも感謝です。ありがとうございました。

さて、ブログを書き終えて今回のYAPCは終わり。
これから2017年度の活動ですが、Perl入学式in大阪も春からSeason6が始まる予定です。 そして、自分が主催している(なにわPerl)https://naniwaperl.connpass.com/も、YAPCも一段落着いたし、ぼちぼちやらなあかんなーと思っているところであります。

そして、夏には福岡です。チケット買いました!
今回じっくりお話ができなかった皆さん、7月のYAPC::Fukuoka 2017 Hakata でお会いしましょう!

できる!ゲーム制作 ~Perl入学式 卒業制作~

Perl入学式 Advent Calendar 2016 5日目の記事です。

まずは軽く自己紹介。

2011年に大阪で始まったPerl入学式。当時、受講生としてとして参加してプログラミングを教えてもらい、そして翌年よりin大阪サポーターとして参加しているTomchaです。現在は、なにわPerlというもくもく会の主催もしています。職業はエンジニアではない、ただのコンピューター好きおじさんです。

序章

さて、皆さんがプログラミングを始めたきっかけは何だったでしょう? 僕の場合、それは遠い遠い昔任天堂から発売されたコイツが世間で大ブームだった時代、

www.youtube.com

たしかクリスマスプレゼントかお誕生日プレゼントだかで本体を買ってもらいました。 しかし当時は小学生。そうそうゲームソフトの新作なんて買ってもらえず、でも色んなゲームがしたい!でも買えない!

そんな時に任天堂から夢のようなデバイスが発表されました。

ファミリーベーシック wikipediaより

これを使えば自分でケームが作れる!マリオもドンキーコングも自分で作れる!作りまくれば色んなゲームがタダで遊び放題!! だけど現実はそんなに甘いものではなく、ファミリーベーシックのスペックは自作プログラム保存メモリ1,982バイト、ベーシック言語、しかも当時小学6年生。あっけなくゲーム作成の野望は砕け散りました...

そして月日はウン十年流れ、、、

Perl入学式でプログラミングを体系的に教わり、趣味でコードをぼちぼちと書いていたある日、書店で横井軍平さんの本を見つけました。

おお、懐かしのゲームウォッチ!そういえば初めてデジタルなゲームをしたのはゲーム&ウォッチの「マンホール」だった。 もしかして、遠い昔に挫折したゲームのプログラミング、大人になった今これぐらい簡単なものならなんとかなるかもしれない?!

https://www.nintendo.co.jp/ds/arjj/gamewatch/

そして懐かしさのモチベーションだけでなんとか完成までこぎつけたのがコチラのプログラムです。

もちろん、Perlで書いています。

github.com

中身はむずかしくなくPerl入学式の第1回から第4回までの講義内容+モジュールの使い方くらいでできてしまうプログラムです。

リアルタイムのアクションゲームなので、Term::Screenというモジュールを使ってみました。

モジュールの使い方は、ひさいち先生のブログ記事を参考にさせていただきました。

hisaichi5518.hatenablog.jp

ゲームを作るにあたって考えたことや工夫したこと

  • ゲームウォッチのゲームって、ほとんどがモチーフは違えど中身のゲーム性は同じと気づいたこと。
  • 迫ってくる何かをキャッチする又は避ける、それが時間差で2ライン、3ライン、4ラインあるなぁと気づいた。
  • 迫ってくる何かは、配列を使って位置を1つずつずらしていけば(shift+push、unshift+pop)表現できるなぁ。

といったところでしょうか。あとはn秒毎に配列の中身を画面に描画すればゲームのステージは出来上がりました。

そうです、Perl入学式で学んだ技術でアクションゲームが作れてしまうんですね〜。

みなさんPerl入学式で一緒に学んでいきましょう!

そして古き良き時代のおっさんたちへ、、、

昔懐かしいノスタルジックな記事にピンときたあなたも、そうでないあなたも、

YAPC::Kansai 2017 OSAKA!!!

12月10日開催の北海道に続き、大阪で・・・詳細は続報を待たれよ!

さて、明日のPerl入学式 Adventcalenderは、in大阪サポーターのsago35さんの記事ですね。 何が発表されるか楽しみですね!

続・さくらVPS+CentOS7で、独自ドメインのウェブサイトを公開するまでの道のり〜https編〜

前回の記事で、無事nginxのリバースプロキシを利用した、さくらVPS + Centos7環境でのwebサイトを公開をすることができました。

さて、次の一歩として、サーバー証明書を導入してhttpsアクセス出来るようにするチャレンジです。

サーバー証明書

今回は無料の Let's Encrypt を使ってみようと思います。この証明書は、LineBotでも使える証明書となっているので、ゆくゆくはこのサーバーでLineBotも作ってみようかというのが最終的な野望です。

Let's Encrypt は、日本語の解説ページもあり、言われる通りすすめるだけでインストールができました。

Let's Encrypt の使い方 - Let's Encrypt 総合ポータル

sudo ls -la /etc/letsencrypt/live/tomcha.net/
# で確認すると、以下のリンクが出来ていました。

cert.pem -> ../../archive/tomcha.net/cert1.pem
privkey.pem -> ../../archive/tomcha.net/privkey1.pem

nginxの設定

前回、nginx.conf で、listen 80; とか書いた感じを、 listen 443;で書いたのを追加すればいいのかなーと予想してみる。

ググッて参考にしたページがこちら。ほぼ予想通りだった。

nginx で ssl 設定をする | dogmap.jp

証明書、鍵のリンクが自分の環境とは異なっているので、その部分は書き換えてnginx.confを修正。

sudo vim /etc/nginx/nginx.conf

書き足した内容は

server {
    listen 443 default ssl;
    ssl on;
    # サーバ証明書(サーバ証明書に中間CA証明書を連結したもの)
    ssl_certificate      /etc/letsencrypt/live/tomcha.net/cert.pem;
    # 秘密鍵
    ssl_certificate_key  /etc/letsencrypt/live/tomcha.net/privkey.pem;  

    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:8080;
        }
    }
}

ngnxをRestartして....

sudo service nginx restart

ブラウザからhttpsで開いてみると...

httpsでアクセスできたーーーー!!証明書キターーーーー!

f:id:tomcha0079:20160803205724p:plain

さくらVPS+CentOS7で、独自ドメインのウェブサイトを公開するまでの道のり

SakuraVPSで独自ドメイン運用しているwebサイト、CentOS6からCentOS7に再インストールしてからずっと放置していたので、作業したこと、詰まったことメモ。

やりたい事は、

  1. http://tomcha.net へのアクセスで、独自サイトを表示。
  2. 独自サイトはSinatra + Passenger で動かす。
  3. httpsも出来るように、証明書を設置。証明書はLet's Encryptを使う。
  4. ポートフォワード(前回はiptables,今回はfirewalledを使用)以外に、nginx にもちょっと手を出してみる。

やったこと手順

sinatra + passenger でwebアプリを実行

bundle exec passenger start -p 80 -d

な、なんといきなりエラーががが。どうもポート80で起動すると怒られる。
色々ググってみると、CentOS7では、1024より若いポートで何かするにはroot権限が必要みたい&&怒られる様。

ポート80が駄目だったので、任意のポート(記事の例は5000番)で実行して80番へのアクセスから飛ばす作戦。

bundle exec passenger start -p 5000 -d

80番ポートと443番ポートで外からアクセス出来るように設定。

# 開いてるPublicゾーンのポートの確認
firewall-cmd --list-ports --zone=public
# ポートを開ける
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --add-port=443/tcp --zone=public --permanent
# 設定を有効化
firewall-cmd --reload

80番ポートへのアクセスを5000番ポートに投げる設定。CentOS7から使われているfirewalledを使った設定。

# public ゾーンのポートフォワードを確認
firewall-cmd --zone=public --list-forward-ports
#public ゾーンで TCP80,443の通信をTCP:5000へ投げる設定
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=5000
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=5000

firewalledのポートフォワードでの転送ではなく、nginxのリバースプロキシで制御する方法

  • nginxのステータス確認方法
sudo service nginx status
  • nginxのリバースプロキシの設定
    • /etc/nginx/nginx.conf をsudoで編集
server{
    listen 80;
    server_name  tomcha.net;

    location \ {
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:5000;
    }
}
  • nginxのリスタート等コマンド
sudo service nginx start
sudo service nginx stop
sudo service nginx restart

nginxのリバースプロキシを使った場合、これで設定はOKなはずなのに、サイトにアクセスするとnginxのエラーページが表示される。
なので、nginxのログを調べてみた。

sudo ls -la /var/log/nginx/
  # -> error.logってファイルが存在することがわかる。
sudo cat /var/log/nginx/error.log
  # -> connect() to 127.0.0.1:5000 failed (13: Permission denied)が出まくる。

どうもパーミッションの関係で5000番ポートへの接続ができていない。色々ググッてみたところ、SELinuxのセキュリティで引っ掛かってるみたい。
この辺から、かなり手に負えない感じなので、色々参考にさせてもらったサイトはこちら。

CentOS7.1 64bit SELinuxによるアクセス制御 | kakiro-web カキローウェブ

SELinuxが妨害してるのか、一度SELinuxを無効化して確認してみる。

getenforce
  # -> 現在有効か無効か確認

# 無効化してみる
sudo setenforce Permissive

SELinuxを無効化すると、ちゃんとSinatraで作ったwebアプリが表示された。ということは、こいつが邪魔をしている模様。
ググッてみて、同じ状況の対策が書かれている記事を発見。同じようにやってみる。

qiita.com

www.crystalsnowman.com

# SELinuxをもう一度有効化。
sudo setenforce Enforcing
  # -> 予想通り繋がらなくなった。

# SELinuxの状態を表示するツールsesearchを実行したが、コマンドが見当たらず。ツールをインストール。
sudo yum install setools-console

# SELinuxの状態を表示させる。オプションはコピペした
sesearch -A -C -s httpd_t -t http_cache_port_t -c tcp_socket

# httpd_can_network_relayのbool値を変更。(拒否DTをはずす)
sudo setsebool -P httpd_can_network_relay=1
  # -> 元に戻す時は httpd_can_network_relay=0 に。



繋がったーーーー