Rails + MySQL + Docker + Github Actions で詰まった所
Dockerを使ってRails環境を作成する。
以下がすごく参考になった。
Rubyは毎年クリスマスに大型アップデートがあるということで、2.7を使ってみた
以下はDockerfile
FROM ruby:2.7.0 ~~~
RailsはapiモードとMySQLを使用したかったので、以下のように rails new
コマンドを差し替えた。
docker-compose run web rails new . --force --database=mysql --api
Rails + MySQL + Dockerまではスムーズに開発環境を作成することができた。
Github Actionsの設定で詰まった...。
github.com
を参考にして.github/workflows/rails-ci.yml
を追加し、以下のようにworkflowを作成した。
name: rails on: [push] jobs: build: runs-on: ubuntu-latest services: db: image: mysql:5.7 env: MYSQL_ROOT_PASSWORD: password ports: - 3306 options: --health-cmd "mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 10 steps: - uses: actions/checkout@v1 - name: Set up Ruby 2.7 uses: actions/setup-ruby@v1 with: ruby-version: 2.7.x - name: apt-get run: | sudo apt-get update sudo apt-get install libmysqlclient-dev - uses: actions/cache@v1 with: path: vendor/bundle key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-gems- - name: bundle install run: | gem install bundler bundle install --jobs 4 --retry 3 - name: migration run: | bundle exec rails db:create bundle exec rails db:migrate env: RAILS_ENV: test MYSQL_ROOT_PASSWORD: password - name: run rubocop run: | bundle exec rubocop - name: run rspec run: | bundle exec rspec env: RAILS_ENV: test MYSQL_ROOT_PASSWORD: password
しかし、setup rubyがruby 2.7.0
に対応しておらず使えなかったので 2.6.3
に変更しました。
また、Access denied for user 'root'@'localhost'
とGithub Actions上のMySQLに繋げないっぽい。
というか、ubuntsu-latestにMySQLはすでにインストールされてるっぽい
というわけで、以下のように書き換えました。
また、database.ymlを開発用とci用で分けるために、database.yml.ci
を作成し、cpコマンドでGithub Actions上で書き換えるようにしました。
name: rails on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: ruby-version: 2.6.3 - name: apt-get run: | sudo apt-get update sudo apt-get install libmysqlclient-dev - uses: actions/cache@v1 with: path: vendor/bundle key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-gems- - name: bundle install run: | gem install bundler bundle install --jobs 4 --retry 3 - name: migration run: | cp config/database.yml.ci config/database.yml bundle exec rails db:create bundle exec rails db:migrate env: RAILS_ENV: test - name: run rubocop run: | bundle exec rubocop - name: run rspec run: | bundle exec rspec env: RAILS_ENV: test
Intellij + delve でGoのデバッグ環境を作る
Intellij, Goはインストール済みとします。
delveをインストールする
Installationにしたがって、インストール
$ go get -u github.com/go-delve/delve/cmd/dlv
デバッグしてみる
could not launch process: debugserver or lldb-server not found: install XCode’s command line tools or lldb-server
????
なんと Xcode's command line tools的なのがないらしい。
というわけで、
xcode-select — install
行けました
わっしょい。
おまけ
Go 1.11からgo moduleが使えるようになりました。
Intellijでは、go moduleを使用すると、プロジェクトごとに必要なライブラリバージョンをダウンロードしてインポートすることができるようになっています。
公式より拝借
詳しくは、これを見ましょう
依存関係から図を作成できたりして、すごい。。。
Hack Day 2019で優勝した。
Hack Day 2019 で優勝した。
予告したので、優勝してきました。
#つくるってたのしいね #hackday2019 pic.twitter.com/AAm6QcuLas
— みかみたいが@諭吉 (@gutio_jp) December 17, 2019
参加したきっかけ
Hack U で最優秀賞だと Hack Dayに招待され、招待枠として参加できます。
作ったもの
Hack ID: 40 スパークジョイ の 「おそうじぶーぶー」です。
何もらったの?
掃除機を自作して、ジェームズ・ダイソンになる
この記事は 千葉大学アドベントカレンダー 23日目の記事です。
この記事を読むと以下のような掃除機が作れるようになります!
はじめに
もし、あなたは、掃除機を作れますか?と就職試験で言われた時どう答えますか?
もし、ドクターストーンみたいな世界になった時に部屋のフローリングに落ちたお米をどうやって拾いますか?
もし、飲み会の席で一発ギャグをやれと言われた時、あなたは何をしますか?
こんな時に役立つ方法を今回は伝授したいと思います。
それは、掃除機を作る方法です。
なんで掃除機??っと思われるかもしれません。
少し考えてみてください。あなたは掃除機が作れますか?そして、あなたの周りで掃除機を作れる人はいますか?
おそらく99.98%の方は掃除機を作れるという人が周りにいないと思います。
掃除機を作ることができる人はポケモンの色違いよりも遭遇するのが難しいのです。
そう!そして、この記事を読めばあなたは色違いになれるのです!
Q. 最初に掃除機を作った人は?
A. アイビス・マガフィー(Ives W. McGaffey)
アイビス・マガフィーは1868年に初めて、真空掃除機を作った偉大な人です。
真空掃除機の原理は、手でレバーを引いて負圧を生み、その力でノズルからゴミを吸い取り容器に貯めるという簡単なものでしたが、いちいちレバーを引かなければいけないので面倒なのが手間でありました。
1868年といえば、、、日本では、戊辰戦争の真っ只中、、、つまり、江戸時代と言いたかったが、ギリギリ明治時代wwww。
1990年代になるとサイクロン式掃除機が増えてき始めました。
現代のサイクロン式掃除機は、1985年にイギリスのデザイナー「ジェームズ・ダイソン」が工業用粉体分離器にヒントを得たものでした。
粉体分離器
粉体分離器は、気体や液体とそれに混じった粉末状の固体を分離するための分級機です。
粉体分離器は以下のような原理で動いています。
遠心分離機の応用とも言われ、気体は上方方向に排出され、個体は回転しながら壁にぶつかり、下に排出されるという原理です。
今回はこの原理を利用して、ジェームズ・ダイソンになれる方法を書きます。
今回作成する掃除機
このようにサイクロン式の掃除機を作る手順を書き記します。
用意するもの
用意する材料は以下に示す。
- ペットボトル
- 缶コーヒー
- モーター
- ネット
- 電池
- 導線
- ビニールテープ
- プラスチック用ボンド
- ホットボンド
1つずつどんなものが良いか詳しく説明していきます。
ペットボトル
炭酸がオススメです。なおかつ模様がないものを用意しましょう。
理由は、炭酸のペットボトルは底の高さが浅く、模様がないのでつなぎを作る際に空気が漏れにくいのです。ペットボトル選びはとても重要なのでこだわりましょう。
缶コーヒー
なぜ缶コーヒーが必要なの?!と思ったそこのアナタ!甘いですね〜
というわけで、苦いコーヒーを買ってきましょう。
これは空気の流れを作る上で重要なプロペラを作成します。
モーター
モーターは安いからと言って標準のDCモーターを使ってはいけません。
回転数が、足りないのです。ワタシ的には4躯のHYPERDASHシリーズのモーターがオススメです。
ネット
ネットは大きいゴミをキャッチするために使用します。
作成手順
1. ペットボトルを半分に切る
ペットボトルを切ると、切り口が危ないので、ビニールテープで巻いておきます。
2. ペットボトルの底に穴を空ける
ペットボトルの底に、空気の流れを作るために穴を開けます。
3. モーターとペットボトルのキャップを付ける
ペットボトルの底自体は、不安定なので、ペットボトルのキャップ再利用して土台に使います。
モーターが動かないように、ペットボトルの底にモーターを止めます。
4. 缶コーヒーからプロペラを作る
缶コーヒーを腹開きし、ペットボトルの直径より一回り小さい円を作成します。
その円の中心を通るように8方向の円を書き、その線に沿ってはさみで切り、羽を作っていきます。
5. 動線を電池ボックスに取り付ける
(髪の毛が入っていて汚くてすみません:bow: 色々吸い込み過ぎましたw)
6. ペットボトルにつなぎを付ける
ペットボトルの上下を噛ませるためにつなぎをつけます。
7. ネットを付けて完成!!
モーターの前をネットが覆うように取り付ければ完成です。
最後に
みなさんは掃除機を作ったことがある人に出会ったことはありますか?
ダ〇〇ンで働いている社員さんでも、チームで掃除機を作ったことがあっても1人で掃除機を作ったことはないと思います。(研修などで作成することがあったらダ〇〇ンさんごめんなさい。)
この記事を読み、実践すれば、胸を張って掃除機を作れます!と言えますね!!
フィンランド・ラトビアに行ってきました
ラトビアで学会があったので研究室の人たちとフィンランド・ラトビアに行きました。
フィンランド
とりあえず、ヨーロッパ諸国に行く時は必ずトランジットはあるものですが、フィンランドのヘルシンキ空港がおすすめです。理由はコミュニケーションしなくて良いからです。全部バーコードでピッピしてチケットから荷物まで直感的にできます。
これはヘルシンキ大聖堂です。めちゃくちゃでかい。
紀子様にエンカしたのでフィンランドで謎の女性からインタビューされました。
フィンランドはピクトグラムが多く、文字での説明はほとんどないイメージ。
やはり、交通の法規制がしんどいアジアとは違い。電動スクータービュンビュン。
フィンランドではスウェーデン発のVoiが電動スクーター業界を牛耳っている様子でした。
フィンランドは物価が少し高いので、乗りすぎると大変な額を請求されます。
後ろにあるのは図書館です。
チーズケーキのような見た目をしています。
中はこんな感じで、オシャレです。
3Dプリンター、PSVR、タブレット、PCなど様々なものを借りることができます。もはや図書館ではありません。
これは市場だと思います。18時頃に行きましたがすでに閉まっていました。
18時ですが、白夜で21時とかを過ぎても相当明るいです。最高です。
クレイジーなドイツ人がいたので一緒に写真を撮ってあげました。
じゃがいもが主食なので、とにかくマッシュポテトを大量に出してきます。味付けもまあまあなくせにクソ高いのが難点です。
ラトビア
ラトビアはリガに行きました。宿泊した所はオールドタウンなので街並みは日本人が好きそうな感じ。
歩いていける距離に中央市場がありました。ラトビアはフィンランド・日本より物価が安く、さくらんぼ1kgで1€なのでくっそ安いやんパクパクです。絶対ホテルで腐ります。
ラトビアではフィンランドと違いBoltが交通を制しています。
ラトビアは道路がボコボコなのでスクーターで移動するのはオススメではありません。Boltはスクーターが借りれる他にUberのように素人の乗用車に乗ることができます。しかもめちゃくちゃ安い!!移動に関しては困ることはありません。
学会の遠足では、森に行きダンスを踊りました。
また、ソビエトの名残である核シェルター施設に行きました。なぜか、地下でウォッカを体に流し込む儀式がありました。
リガ大聖堂に行きました。たまにオルガンの音もなるのかな?昼寝に良さそうです。
学会に参加した時に飲んだ45°のラトビア最強の酒「ブラックバルサム」です。発表終わりに飲むと最高です。口も饒舌になり、ペラペラ英語が出そうな勢いになります。
ラトビアのご飯は日本人の大好きな「インスタ映え」な料理が沢山です。しかも安い。しかも上手い。でも、味付けが同じようなものばかりなので、日本食はすごいです。多分、ヨーロッパにいた期間で一番おいしかったのは、学会参加者に頂いた「みそ汁」です。
ちなみに、学会ではポスターのセカンドをもらいました。お金もらえるらしいので嬉しい。
リガは初日で主要な観光地はほぼ回ったので、旅行に行く際はちょっと寄れば良いって感じです。
フィンランドもラトビアも、ほぼ英語通じるので良き良きの良きでした。
Quoraを始めてみました。
これですね。
Yahoo知恵袋に似たQ&Aサイトですが、非匿名性?なのが売りだと思われます。
UXがとにかく良いと思いました。なんでも質問することができ、Matzやバラク・オバマにも質問することができます。
また、パートナーシップに参加するとお金がもらえます!!
たくさん質問して、たくさん学んで、たくさんお金をもらいましょう。
Go(Gin)とVue(Nuxt)で爆速でPWAを作ってみた
作ったアプリ
https://okazugacha.netlify.com/
おかずガチャです。
作った背景
世の中のお母さんは、毎日の晩御飯に悩みます。。。
学生の私でさえ、スーパーで購入する弁当に悩みます。
それを強制的に解決してくれるのが「おかずガチャ」です。
アプリ構成
Goを勉強したかったので、Firebaseなどを利用してサーバーレスにはせず、GinをAPIサーバーとして利用しています。APIサーバーはHerokuにデプロイし、Procfileでスクレイピングなども制御しています。
フロントエンドはNuxt.jsを利用しました。vue-cliを使用すれば、ポチポチするだけでPWAっぽいサービスが作成できます。Netlifyを使用しています。
HerokuもNetlifyも無料でかつ、デプロイが楽なのでありがたい。
おかず集め
ガチャの種となる、おかずコレクトの作業が必要です。
アプリ構成を見て分かる通り、Gopherくんがおかずをコレクトしています。私は、Goqueryを利用して、エバラのおかずサイトからスクレイピングしました。
https://github.com/PuerkitoBio/goquery
https://www.ebarafoods.com/recipe/cla_menu/49/?&limit=100
エバラのおかずサイトはどれも暖色系なので美味しそうですね!!
APIサーバー構築
大まかにこのような形でディレクトリ分けをしてみました。
MVCに近いと思います。
controllerでルーティングに対して、出力するmodelの値設定
dbはdbの設定(DBはDocker上にpostgresをDBサーバーとしてホスティングしていたので、その設定を書いています。)
frontendにフロントエンドのNuxt.jsのコード
modelにOkazuについての属性とsqlでDBからデータを持ってくる処理
routerディレクトリでルーティングの設定
をしました。
感想
私は、iPhoneを使用しているので、Safariから、おかずガチャのURLにアクセスしてホーム画面に追加を押すと、ブラウザとは独立してアプリのように動作してくれるようになりました!
すごい!簡単!