Rails + MySQL + Docker + Github Actions で詰まった所

Dockerを使ってRails環境を作成する。

以下がすごく参考になった。

qiita.com

Rubyは毎年クリスマスに大型アップデートがあるということで、2.7を使ってみた

以下はDockerfile

FROM ruby:2.7.0
~~~

Railsapiモードと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 rubyruby 2.7.0 に対応しておらず使えなかったので 2.6.3に変更しました。 また、Access denied for user 'root'@'localhost'Github Actions上のMySQLに繋げないっぽい。 というか、ubuntsu-latestにMySQLはすでにインストールされてるっぽい

help.github.com

というわけで、以下のように書き換えました。 また、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をインストールする

github.com

Installationにしたがって、インストール

$ go get -u github.com/go-delve/delve/cmd/dlv

デバッグしてみる

Intellijを開いて、ブレークポイントを打ちます。 f:id:mikamimikami60:20191225001256p:plain

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

行けました

f:id:mikamimikami60:20191225001531p:plain

わっしょい。

おまけ

Go 1.11からgo moduleが使えるようになりました。

github.com

Intellijでは、go moduleを使用すると、プロジェクトごとに必要なライブラリバージョンをダウンロードしてインポートすることができるようになっています。

f:id:mikamimikami60:20191225002113p:plain 公式より拝借

詳しくは、これを見ましょう

pleiades.io

依存関係から図を作成できたりして、すごい。。。

Hack Day 2019で優勝した。

Hack Day 2019 で優勝した。

予告したので、優勝してきました。

参加したきっかけ

Hack U で最優秀賞だと Hack Dayに招待され、招待枠として参加できます。

作ったもの

Hack ID: 40 スパークジョイ の 「おそうじぶーぶー」です。

何もらったの?

www.sxsw.com

アメリテキサス州 オースティンで行われるSXSWに参加できるようになりました!最高!!

掃除機を自作して、ジェームズ・ダイソンになる

この記事は 千葉大学アドベントカレンダー 23日目の記事です。

 

この記事を読むと以下のような掃除機が作れるようになります!

 

f:id:mikamimikami60:20191222155228g:plain

吸引動画

 

はじめに

もし、あなたは、掃除機を作れますか?と就職試験で言われた時どう答えますか?
もし、ドクターストーンみたいな世界になった時に部屋のフローリングに落ちたお米をどうやって拾いますか?
もし、飲み会の席で一発ギャグをやれと言われた時、あなたは何をしますか?
こんな時に役立つ方法を今回は伝授したいと思います。
それは、掃除機を作る方法です。
なんで掃除機??っと思われるかもしれません。
少し考えてみてください。あなたは掃除機が作れますか?そして、あなたの周りで掃除機を作れる人はいますか?
おそらく99.98%の方は掃除機を作れるという人が周りにいないと思います。
掃除機を作ることができる人はポケモンの色違いよりも遭遇するのが難しいのです。
そう!そして、この記事を読めばあなたは色違いになれるのです!

 

Q. 最初に掃除機を作った人は?

A. アイビス・マガフィー(Ives W. McGaffey)

アイビス・マガフィーは1868年に初めて、真空掃除機を作った偉大な人です。

真空掃除機の原理は、手でレバーを引いて負圧を生み、その力でノズルからゴミを吸い取り容器に貯めるという簡単なものでしたが、いちいちレバーを引かなければいけないので面倒なのが手間でありました。

 

1868年といえば、、、日本では、戊辰戦争の真っ只中、、、つまり、江戸時代と言いたかったが、ギリギリ明治時代wwww。

1990年代になるとサイクロン式掃除機が増えてき始めました。

現代のサイクロン式掃除機は、1985年にイギリスのデザイナー「ジェームズ・ダイソン」が工業用粉体分離器にヒントを得たものでした。

 

f:id:mikamimikami60:20191222170529j:plain

ジェームズ・ダイソン

 

粉体分離器

粉体分離器は、気体や液体とそれに混じった粉末状の固体を分離するための分級機です。

粉体分離器は以下のような原理で動いています。

f:id:mikamimikami60:20191222153524p:plain

粉体分離器

遠心分離機の応用とも言われ、気体は上方方向に排出され、個体は回転しながら壁にぶつかり、下に排出されるという原理です。

 

今回はこの原理を利用して、ジェームズ・ダイソンになれる方法を書きます。

 

今回作成する掃除機

f:id:mikamimikami60:20191222154214p:plain

掃除機

f:id:mikamimikami60:20191222155228g:plain

吸引動画

このようにサイクロン式の掃除機を作る手順を書き記します。

 

用意するもの

用意する材料は以下に示す。

  • ペットボトル
  • 缶コーヒー
  • モーター
  • ネット
  • 電池
  • 導線
  • ビニールテープ
  • プラスチック用ボンド
  • ホットボンド

1つずつどんなものが良いか詳しく説明していきます。

ペットボトル

f:id:mikamimikami60:20191222155507j:plain

ペットボトル

炭酸がオススメです。なおかつ模様がないものを用意しましょう。

理由は、炭酸のペットボトルは底の高さが浅く、模様がないのでつなぎを作る際に空気が漏れにくいのです。ペットボトル選びはとても重要なのでこだわりましょう。

 

缶コーヒー

f:id:mikamimikami60:20191222160002j:plain

缶コーヒー

なぜ缶コーヒーが必要なの?!と思ったそこのアナタ!甘いですね〜

というわけで、苦いコーヒーを買ってきましょう。

これは空気の流れを作る上で重要なプロペラを作成します。

 

モーター

 

f:id:mikamimikami60:20191222160133j:plain

DCモーター

f:id:mikamimikami60:20191222160146j:plain

hyper dash 4躯 モーター

モーターは安いからと言って標準のDCモーターを使ってはいけません。

回転数が、足りないのです。ワタシ的には4躯のHYPERDASHシリーズのモーターがオススメです。

 

 ネット

f:id:mikamimikami60:20191222162823j:plain

ネット

ネットは大きいゴミをキャッチするために使用します。

 

 作成手順

1. ペットボトルを半分に切る

 

f:id:mikamimikami60:20191222235752j:plain

半分に切ったペットボトル


 

ペットボトルを切ると、切り口が危ないので、ビニールテープで巻いておきます。

 

2. ペットボトルの底に穴を空ける

 

f:id:mikamimikami60:20191222235826j:plain

ペットボトルの底に穴を空ける

ペットボトルの底に、空気の流れを作るために穴を開けます。

 

3. モーターとペットボトルのキャップを付ける

 

f:id:mikamimikami60:20191222235910j:plain

キャップとモーターを付ける

 

ペットボトルの底自体は、不安定なので、ペットボトルのキャップ再利用して土台に使います。

モーターが動かないように、ペットボトルの底にモーターを止めます。

 

4. 缶コーヒーからプロペラを作る

 

f:id:mikamimikami60:20191223000003j:plain

缶コーヒーから作ったプロペラ

缶コーヒーを腹開きし、ペットボトルの直径より一回り小さい円を作成します。

その円の中心を通るように8方向の円を書き、その線に沿ってはさみで切り、羽を作っていきます。

 

5. 動線を電池ボックスに取り付ける

 

f:id:mikamimikami60:20191223000204j:plain

モーターと導線

f:id:mikamimikami60:20191223000103j:plain

電池ボックスとスイッチ


 (髪の毛が入っていて汚くてすみません:bow: 色々吸い込み過ぎましたw)

 

6. ペットボトルにつなぎを付ける

f:id:mikamimikami60:20191223000338j:plain

つなぎ

 ペットボトルの上下を噛ませるためにつなぎをつけます。

 

 

7. ネットを付けて完成!!

 

f:id:mikamimikami60:20191223000351j:plain

ネット

 モーターの前をネットが覆うように取り付ければ完成です。

 

 最後に

 

みなさんは掃除機を作ったことがある人に出会ったことはありますか?

ダ〇〇ンで働いている社員さんでも、チームで掃除機を作ったことがあっても1人で掃除機を作ったことはないと思います。(研修などで作成することがあったらダ〇〇ンさんごめんなさい。)

 

この記事を読み、実践すれば、胸を張って掃除機を作れます!と言えますね!!

フィンランド・ラトビアに行ってきました

ラトビアで学会があったので研究室の人たちとフィンランドラトビアに行きました。

フィンランド

とりあえず、ヨーロッパ諸国に行く時は必ずトランジットはあるものですが、フィンランドヘルシンキ空港がおすすめです。理由はコミュニケーションしなくて良いからです。全部バーコードでピッピしてチケットから荷物まで直感的にできます。

f:id:mikamimikami60:20190712181023j:plain

ヘルシンキ大聖堂



これはヘルシンキ大聖堂です。めちゃくちゃでかい。

 

紀子様にエンカしたのでフィンランドで謎の女性からインタビューされました。

www.is.fi

 

フィンランドピクトグラムが多く、文字での説明はほとんどないイメージ。

f:id:mikamimikami60:20190717004506j:plain

 

やはり、交通の法規制がしんどいアジアとは違い。電動スクータービュンビュン。

www.voiscooters.com

 

フィンランドではスウェーデン発のVoiが電動スクーター業界を牛耳っている様子でした。

フィンランドは物価が少し高いので、乗りすぎると大変な額を請求されます。

f:id:mikamimikami60:20190717004758j:plain

Voi



 

後ろにあるのは図書館です。

チーズケーキのような見た目をしています。

f:id:mikamimikami60:20190717005526p:plain

ヘルシンキ図書館



中はこんな感じで、オシャレです。

3DプリンターPSVRタブレット、PCなど様々なものを借りることができます。もはや図書館ではありません。

 

f:id:mikamimikami60:20190717005858j:plain

市場?



これは市場だと思います。18時頃に行きましたがすでに閉まっていました。

18時ですが、白夜で21時とかを過ぎても相当明るいです。最高です。

f:id:mikamimikami60:20190717010101j:plain

ドイツの家族

クレイジーなドイツ人がいたので一緒に写真を撮ってあげました。

f:id:mikamimikami60:20190717010541j:plain

シカとマッシュポテトの料理

じゃがいもが主食なので、とにかくマッシュポテトを大量に出してきます。味付けもまあまあなくせにクソ高いのが難点です。

ラトビア

f:id:mikamimikami60:20190717010334j:plain

リガの街並み

ラトビアはリガに行きました。宿泊した所はオールドタウンなので街並みは日本人が好きそうな感じ。

f:id:mikamimikami60:20190717010730j:plain

中央市場のさくらん

歩いていける距離に中央市場がありました。ラトビアフィンランド・日本より物価が安く、さくらんぼ1kgで1€なのでくっそ安いやんパクパクです。絶対ホテルで腐ります。

 

ラトビアではフィンランドと違いBoltが交通を制しています。

bolt.eu

f:id:mikamimikami60:20190717010933j:plain

Bolt

ラトビアは道路がボコボコなのでスクーターで移動するのはオススメではありません。Boltはスクーターが借りれる他にUberのように素人の乗用車に乗ることができます。しかもめちゃくちゃ安い!!移動に関しては困ることはありません。

 

f:id:mikamimikami60:20190717011428p:plain

ラトビアの森

学会の遠足では、森に行きダンスを踊りました。

f:id:mikamimikami60:20190717011310j:plain

核シェルター施設

また、ソビエトの名残である核シェルター施設に行きました。なぜか、地下でウォッカを体に流し込む儀式がありました。

 

f:id:mikamimikami60:20190717011643j:plain

ブレーメンの音楽隊

f:id:mikamimikami60:20190717011735j:plain

リガ大聖堂

リガ大聖堂に行きました。たまにオルガンの音もなるのかな?昼寝に良さそうです。

 

f:id:mikamimikami60:20190717011935j:plain

ブラックバルサ

学会に参加した時に飲んだ45°のラトビア最強の酒「ブラックバルサム」です。発表終わりに飲むと最高です。口も饒舌になり、ペラペラ英語が出そうな勢いになります。

f:id:mikamimikami60:20190717012326j:plain

ラトビアのご飯

ラトビアのご飯は日本人の大好きな「インスタ映え」な料理が沢山です。しかも安い。しかも上手い。でも、味付けが同じようなものばかりなので、日本食はすごいです。多分、ヨーロッパにいた期間で一番おいしかったのは、学会参加者に頂いた「みそ汁」です。

f:id:mikamimikami60:20190717012618j:plain

学会に参加している私

ちなみに、学会ではポスターのセカンドをもらいました。お金もらえるらしいので嬉しい。

 

リガは初日で主要な観光地はほぼ回ったので、旅行に行く際はちょっと寄れば良いって感じです。

フィンランドラトビアも、ほぼ英語通じるので良き良きの良きでした。

 

Quoraを始めてみました。

jp.quora.com

 

これですね。

 

Yahoo知恵袋に似たQ&Aサイトですが、非匿名性?なのが売りだと思われます。

UXがとにかく良いと思いました。なんでも質問することができ、Matzやバラク・オバマにも質問することができます。

 

また、パートナーシップに参加するとお金がもらえます!!

たくさん質問して、たくさん学んで、たくさんお金をもらいましょう。

Go(Gin)とVue(Nuxt)で爆速でPWAを作ってみた

作ったアプリ

https://okazugacha.netlify.com/

おかずガチャです。

f:id:mikamimikami60:20190609175126p:plain


作った背景

世の中のお母さんは、毎日の晩御飯に悩みます。。。

学生の私でさえ、スーパーで購入する弁当に悩みます。

それを強制的に解決してくれるのが「おかずガチャ」です。


アプリ構成

f:id:mikamimikami60:20190609174454p:plain

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サーバー構築

f:id:mikamimikami60:20190609175953p:plain

大まかにこのような形でディレクトリ分けをしてみました。

MVCに近いと思います。

controllerでルーティングに対して、出力するmodelの値設定

dbはdbの設定(DBはDocker上にpostgresをDBサーバーとしてホスティングしていたので、その設定を書いています。)

frontendにフロントエンドのNuxt.jsのコード

modelにOkazuについての属性とsqlでDBからデータを持ってくる処理

routerディレクトリでルーティングの設定

をしました。

感想

私は、iPhoneを使用しているので、Safariから、おかずガチャのURLにアクセスしてホーム画面に追加を押すと、ブラウザとは独立してアプリのように動作してくれるようになりました!

すごい!簡単!

f:id:mikamimikami60:20190609175400g:plain