RailsからRDS(MySQL)のDBに接続できなかった話

こんにちは。システム事業部の大柳です。

Rails+MySQLな構成でEC2にデプロイしたときに、DBにつながらず苦戦したので状況と解消方法を書き留めます。

システム構成

  1. Ruby: ver2.4.2

  2. Rails: ver 5.1

  3. MySQL: ver 5.6 (Amazon RDS)

状況

ソースをクローンしてきて、bundle install してrails s で起動を行うところでした。

起動してみると

Mysql2::Error - Access denied for user '******'@'*****' (using password: YES):

どうやらパスワードが間違っているようです。

database.yml をみなおしてみました。

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  host: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  database: <%= ENV['DB_DATABASE'] %>

ENV['XXXX'] とかは環境変数に定義してあるのを拾ってきます。

環境変数を確認してみましたが、ちゃんと設定されていました。

exec $SHELL --login で反映し直しましたがだめでした。

そこで試しにmysqlコマンドでつながるのか試しました。

mysql -u USER -h HOST -p DATABASE

すると

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 233893
Server version: 5.6.39-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

つながりました・・!

以上のことからrails側のDBの設定がどこかしらおかしいことがわかりました。

その後いろいろ試してはみたものの原因が全然わからず・・・・

上司や同僚に電話して助けを乞ったところ

「わかったよ」

!!!

解決したdatabase.ymlがこちら

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  host: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: "<%= ENV['DB_PASSWORD'] %>"
  database: <%= ENV['DB_DATABASE'] %>

結論をいうと、原因はパスワードに「#」が含まれていたためでした。

「#」が含まれていると何がだめなのかというと、yamlファイルのきまりで「#」以降が コメントアウト になります。

つまり「#Password」というパスワードだっとするとrails''空文字と認識します。

そりゃあ何度やってもパスワードが間違っていると怒られるわけです・・・。

超初歩的な問題でした。

次回からは気をつけたいと思います。

SECCON 2018 Online CTF Writeup

お久しぶりです。ゼネットの阿部と申します。 ブログを書くのはかなり久しぶりです。

SECCON2018に参加し、チームとしては合計点203点という悲しい結果に終わりました。

なんとか1問解けたので、紹介しようと思います。

私が担当したのは f:id:zenet-tech:20181029103342p:plain の問題です。

以下のファイルのダウンロードとFLAGを入力するというだけで特段説明もなく、 SECCONにチャレンジするのが始めての私はもう分けがわかりませんでした。 【unzip.zip_26c0cb5b40e9f78641ae44229cda45529418183f】

しかし、始めなければしょうがないということで始めました...

【unzip.zip_...】というファイル形式で、問題もunzipだったので、 拡張子を【.zip】に変えてみて、展開したらどうかと試したところ以下のフォルダに展開されました。 f:id:zenet-tech:20181029103910p:plain

makefile.sh】を見てみると、

echo 'SECCON{'`cat key`'}' > flag.txt
zip -e --password=`perl -e "print time()"` flag.zip flag.txt

どうやら環境変数のkeyをflag.txtに書き込んでそれをzip化しているようです。

ということは、

zip -e --password=`perl -e "print time()"` flag.zip flag.txt

でパスワードに設定している

perl -e "print time()"

がzipのパスワードで、これさえわかれば解けるはずだと思いました。

Perlはほぼ触れていなかったので、インターネットで検索するとPerlでシステム日時を取得し秒変換をしていることが分かりました。

今回のSECCONは 2018/10/27 15:00:00開始だったので

① 【2018/10/27 15:00:00】を秒に変換して【1540620000】で解凍を試みるも失敗。

UTCが原因かと思い、

② 【2018/10/27 6:00:00】【1540534242】で解凍を試みるも失敗。

日時が知りたいと思い、flag.zipのプロパティを開くと f:id:zenet-tech:20181029105030p:plain

このzipファイルが2018/10/27 0:10:42に作られていることがわかりました。

そこで、

③ 【2018/10/27 0:10:42】【1540566642】で解凍を試みるも失敗...

もしかしたら、ファイルのパスワードを取得したタイミングとファイルが生成されたタイミングがずれたのではと推測し、

④ 【2018/10/27 0:10:41】【1540566641】で解凍を試みると成功!!!

所要時間は【40分】ほどで、難易度も低かったため、もともと500点だった得点も【101点】に... まあ解けただけでも良しとしました。なかなか楽しかったです。

来年はもう少し準備をして、時間も確保してから参加しようと思いました。

ISUCON8予選に参加しました!

こんにちは!システム事業部の村田です。

先日開催されたISUCON8予選に、他の社員2名とチーム「ポテチはのり塩派」で3人で初参加しました!

結果としては予選敗退で、再起動試験でfailという悲しい結果・・・でした

最終的なベンチスコアは6894でした

f:id:zenet-tech:20180927182424p:plain

役割としては 私:インフラ 他2人:コード という形で進めました。

そこまでの作業をまとめようと思います。

続きを読む

RubyKaigi2018参加レポート パート2

はじめまして。システム事業部の大柳です。

だいぶ時間がたってしまいましたが、5月末にRubyKaigiに参加したので印象に残った講話と感想のレポートを書きたいと思います。

はじめに自己紹介

  1. 入社5年目

  2. Ruby歴:約1年

  3. 仕事:Ruby on Rails を使ったシステム開発

以前は主にJavaを使ってシステム開発を行っていましたが、上記のようにRuby自体は初めて間もないひよっ子です。

経験は浅いですがとても有意義な時間となりました。

以下は印象に残ったセッションです。(他の人の記事と被っている部分もありますがご了承ください。。)

セッション

Proverbs

Matzことまつもとゆきひろ氏のセッションです。 「名は体を表す」ということわざがあるようにプログラミングにおいて名前をつけることは重要だというお話です。 何をしたいかがわかるようなメソッド名を付けたり、何を保持しておきたいかわかるような変数名を付けることで誰が見ても理解がしやすくなります。 経験上、例えばユーザーのIDを取得しているのに代入した変数名がただの user になっているなんてことはよくありました。(本当はuser_idとかが良い) こういったことを避けるためにも名前は十分考慮して付けたいですね。

Ruby Committers vs the World

RubyCommitterの方々が登壇していくつかのトピックについて議論や意見を言い合う場です。 中でも気になったのはRuby2.5で実装予定の新機能について「Endless Range」というのが実装される話です。 RubyにはRangeクラスという範囲を扱うクラスがありますが、今まではlastに無限大を指定する際にFloat::INFINITY とかを指定する必要がありました。

しかし今回の機能で範囲のlastの省略が可能になります。 Railsで使うことはあまりない気がしていますが、便利だなと思いました。 というのと同時に今まではlastの書き忘れでsyntaxエラーで落ちてたところが無限にループされる事象が発生しそうな気がしました。

TRICK 2018 (FINAL)

TRICKとは Transcendental Ruby Imbroglio Contest for RubyKaigi の略でRubyKaigi恒例の<めちゃくちゃだけどめっちゃすごいコード>コンテストです。 印象に残ったのは以下のtompngさんのコンテンツです。 Merry Christmasという白抜きのコマンドを実行すると3Dレンダリングされたクリスマスツリーが表示されるプログラムです。

最も歓声が上がってた気がします・・! 他にもさまざまな奇想天外だけどすごいコードがあり、Rubyでこんなことできるのか、、と驚かされました。 ちなみにこのTRICKは今回がFinalだったみたいで次回開催は予定されてないそうです。ぜひ復活してほしいですね!

懇親会

RubyKaigiでは全公演が終了したあとに、After Partyなる懇親会があります。 多くのRubystたちと食事をしながら交流できる場でRuby界隈で有名なコミッターともお話ができるチャンスがあります。

私もいくつかの懇親会に参加しましたが、最初はどのようにして会話に参加すれば良いのかわからずおろおろしてしまいました。 しかし何人かの方から話しかけられたりして会話してるうちに自分からも声をかけていろんな方の話を聞くことができました。 2日目は株式会社オプトさんのドリンクアップに参加し、仙台のおいしい料理をいただきました! 業界あるある話ができたりして楽しめました。ありがとうございました。

1日目f:id:zenet-tech:20180818163704j:plain 2日目f:id:zenet-tech:20180818165603j:plain

最後に

今回初めてRubyKaigiに参加することになり、はじめは自分なんかがセッションを聞いて理解ができるのか?未熟者が参加して失礼じゃないか?と不安もありました。 正直なところ内容は難しいものばかりで今の自分に有益となるかは微妙なところでした。。 しかし、RubyKaigiの魅力は難しいすごい人達のお話を聞くことだけはないと思っています。

上記にも記載しましたが、RubyKiagiではRubystたちと交流ができる場でもあります。 自分と同じ技術を使って仕事をしている方たちと交流できるのは自分にとってすごく刺激になりました。 これからもっと勉強して技術を身に着け、RubyRailsを使いこなせるように頑張っていきたいと思いました。 経験が浅い方でも参加して決して損はないのでどんどん参加してほしいです。

来年は福岡で開催ということが決まりました。ぜひ次回も参加したいと思います!!

RPAセミナー参加レポート

お疲れ様です。第1事業部の西槇と申します。 初めての投稿ですので拙い文章になるかと存じますが、最後まで読んでいただけると幸いです。 (写真をあまり撮れていなかったので、文章が多めです….)

はじめに、私の自己紹介をいたします。ゼネットに入社してから2年目の、まだまだひよっこな文系SEです。様々な現場を見てきた経験を生かして仕事が出来るよう、日々努力しております。ちなみに好きな食べ物は酸辣湯麵です。

今回私は、話題沸騰中の「RPA」について理解を深めるべく、6/22(金)に行われたセゾン情報システムズ様主催の「業務自動化RPAセミナー」に参加いたしました。5名の講演者の講義を拝聴しましたが、どの講義も内容が濃い上にとても分かりやすく、よりRPAについて理解する事が出来ました。全ての講義についてお話ししたいところですが、今回は特に印象に残った講義を取り上げたいと思います。

「RPA」とは?

まずは、本題に入る前に「RPA」とは何かを簡単にご説明したいと思います。RPAとは、「Robotic Process Automation」の略称で、2016年頃から徐々に注目されてきているキーワードの一つです。この言葉には、広義的な意味と、狭義的な意味とで異なる2つの意味を持っています。 前者は、「ソフトウェアロボットによるホワイトカラー業務(データ入力/集計業務など)の自動化」の事を指します。一方後者は、広義的な意味での「RPA」の中のクラス*1の一つを指し、「定型業務を自動的に処理することが出来るソフトウェアロボット」を指します(RPAは後者の意味でよく使われています)。 私も以前、ソフトウェアロボットとしてのRPAの導入に関わる業務を経験しましたが、多数部署へのRPA導入計画などもあり、RPAに大きな期待を抱いている事が現場からもひしひしと伝わっていました。

RPAセミナー講義について

それでは、次にRPAセミナーの感想についてお話いたします。 特に印象に残ったのは、『日立グループのRPA活用事例と、その経験から学ぶRPAとの上手な付き合い方』についての講義でした。講義ではRPA導入が上手く進まない企業が多い現状と、そのような状況に陥ってしまう要因と対策を、実例を用いてお話しいただきました。 その中でも「RPAと他ツールを組み合わせ、適材適所で活用する事によって高い保守性を実現させる」というお話がとても興味深かったです。今まで、RPAのみを使用した自動化業務の実例しか見た事がなかったため、今回の講義によって自分の中の自動化に対する選択肢がより広くなったと感じました。 f:id:zenet-tech:20180816131827j:plain (RPAセミナーの様子)

最後に

RPAセミナーに参加して感じた事は、やはりRPAのようなデジタルレイバー(仮想知的労働者)の需要は増加傾向にある、という事です。セミナー会場にいらした方々も、様々な業種の方がいらっしゃいました。 つまり、どの業種にも業務自動化の流れが来ている、という事が分かります。そして同時に、業務自動化に関する正しい知識と認識や、デジタルレイバーの管理方法などを伝授するスキルを持つ人材が必要になると考えられます。 RPAは今後も大きく展開していく可能性があると思います。どのように展開されていくのか、またどのようなスキルが必要になっていくのか、更に注目していこうと思います。

*1:「判断力」や「自己学習能力」によって分けられるクラス

  • Class1:RPA 自己学習能力はなく、定義されたルールに従って処理を行う。
  • Class2:EPA RPAより多くのデータを処理し、分析する機能を有する。AIと同義。
  • Class3:CA  データを分析した上で多様な選択肢を提案する。AIと同義。

RubyKaigi2018参加レポート

システム事業部の五十島です。 今年も5/31〜6/2に仙台で開催されたRubyKaigi2018に参加してきました。
弊社からは4人参加し、内2名は会社から旅費+チケット代が出ています。*1

会場

今年のRubyKaigiの会場は、仙台国際センターでした。
会場周辺はとても静かですが、ちょっと歩けば町中まで行けるかなり便利な場所です。

f:id:zenet-tech:20180617233411j:plain f:id:zenet-tech:20180617233420j:plain

近くにアイススケートの発祥の地があるため、最寄りの「国際センター駅」にはアイススケートで有名なお二人のパネルが設置されています。

f:id:zenet-tech:20180617233332j:plain

セッション

今回は型の話やRuboCopなどのlint関連の話が多かったような印象です。
他にも、Ruby2.6で入るであろうJITコンパイラの話、スピードアップ系、mrubyなど・・・おなじみの話ももちろんありました。
特に面白かったものをいくつかピックアップしていきます。

Keynote (Mats)

f:id:zenet-tech:20180617233411j:plain

今年の1日目最初のKeynoteセッションはまつもとひろゆきさんでした。*2箴言 Proverbs」というタイトルです。 3つの大きなテーマで話されていました。

1つ目「名は体を表す」命名規則についてです。

  • 「何をしたいのか」がわかるメソッド名がいい! -> yield_self を then に変更しました。
  • kaminariみたいな何をするかわからないgem名はだめだね
  • Googleアビリティが高い名前をつけると良い。一文字もじったような名前とかもいいよね。

2つ目「時は金なり」パフォーマンス改善、簡潔さの話です。

  • Rubyは簡潔にかける。型がないから更にコンパクトにかける
  • Ruby2.6からJITコンパイラが導入され高速化 => パフォーマンス改善
  • 将来的に複数のCronで動かせるように・・・なるかも

3つ目「塞翁が馬」

  • Ruby is Dead:毎年Rubyは死んでいる。そして、毎年復活する
  • モデルが太りすぎる問題

The Method JIT Compiler for Ruby 2.6 (k0kubun)

こちらは3日目のセッションになります。
名言「C is Dead」が飛び出し、クソコラまで作成されたRubyKaigiの(悪い意味で)歴史に残るセッションではなかったのかと思います。
内容はJITコンパイラの最適化手法で、名言がなくても良いセッションでした。
現在公開されているRuby2.6.0-preview2には、並列実行のバグがあるため本番運用では使用しないでくださいとのことでした。 

speakerdeck.com

お弁当

周辺に食事処が少ないためか、お弁当でした。
5種類もあり、どのお弁当も美味しかったです。

f:id:zenet-tech:20180617233717j:plain f:id:zenet-tech:20180617233729j:plain

おわりに

来年度も弊社はRubyKaigiの参加費を出していきたいと考えております。 Rubyには力を入れ始めているので、興味がある方はぜひご応募ください。

*1:自分は自費です

*2:RubyKaigi2017は2日目です

RubyKaigi2018参加レポート パート1

システム事業部の北川と申します。ここでブログを書くのは初めてなので温かい目で見てもらえると幸いです! ブログの本題に入る前に自分のプロフィールを簡単に紹介します。

Zenet歴     今年で4年目
業界歴     約5年
仕事内容    webアプリ開発
Ruby経験     約3年
好きな言語   もちろんRuby!
興味があること IoT
超最近の趣味  Railsでアプリ開発
好きなお酒   ビール

こんな感じです。 見てもらえるとわかるようにRubyはまだまだです。 そんな中、先日仙台で開催されたRubyKaigi2018に参加してきました。 初参加のRubyKaigiでは多くの方の色々な話を聞けました。 印象に残った話を取り上げたいと思います。

Keynote Rubyの生みの親であるまつもとゆきひろさんのKeynoteです。 まつもとさんがはことわざからプログラミングについて学べることを話しました。中でも印象的残ったのが「名は体を表す」ということわざの話です。 プログラミングではクラスやメソッド、変数などに名前をつけますが、どういう振る舞いをするかを名前に込めるので非常に重要になります。また、テストコードにおいても中身にあったテスト名を書かなければ誤解のもとになります。 良い名前をつければそのモノが何を示しているかがひと目で分かるようになるので慎重に選ぶべきなのです。 私の現場ではまさに名前が分かりづらいということで問題になっています。リーダブルコードを読んで名前の重要度を理解していたのでこの話はとても共感できました。

Firmware programming with mruby/c Hitoshi HASUMIによるmruby/cについての発表です。 mruby/cとは「省メモリで動作できることにより、低消費電力で稼働できるとのこと」だそうです。 HASUMIさんはIoTのプロジェクトで酒造現場などの品温変化をインターネット経由でスマホ等から監視できるようにしたそうです。 RubyKaigiに参加するまでmruby/cという存在を知りませんでした。またRubyでIoTを開発できることも知りませんでした。 この発表を受けてIoTをとても身近に感じ自分たちでも開発してみようという話が上がりました。 具体的な内容としては、Raspberry Pi にUSBマイクを取り付けて音を認識できるようにし、一定上の音を認識したらアラートを上げるようなモノを考えています。

TRICK 2018 (FINAL) 意味不明なプログラムコンテスト「TRICK FINAL」です。 業務には全く使えないけどおお!ってなったり笑えるような変なプログラミング(褒め言葉)が発表されました。 個人的に特にすごいと思ったのはmame さん作の回転しながら自身を出力するコードです。 入賞したコードは https://github.com/tric/trick2018 で取得することができるようなので興味ある方は是非見てください。 TRICK 2018のときが一番会場が盛り上がっていたように思えます。 また、RubyKaigiの中で一番コードを書きたいと思えた瞬間でもありました。

■最後に 正直難しくて理解出来なかった話のほうが多かったです。 しかしとても良い刺激を受けて自分のRubyやプログラミングに対するモチベーションが上がりました。それと同時に自分の未熟さを痛感して意識を変えるきっかけにもなりました。 RubyKaigi後の懇親会でRuby committerさんや多くのRubyistさん達と話せたことも良い経験です。 来年のRubyKaigiは4月に九州で開催される予定です。 次も参加して今年以上に自分の糧にします。