20191012のMacに関する記事は14件です。

cronでpmsetを複数登録する

以前seleniumでchrome自動操作を定期的に行う処理をしたいたが、macのシステム環境設定からのスケジュール設定数には限界があることを知りこの機会にまとめておく。

問題点

スクリーンショット 2019-10-12 23.18.38.png
見ればわかるが起床またはスリープ解除はそもそも1つしか設定できない。

解決策

調べたらmacでは電源の操作をpmsetで行うらしい。
簡単な例文は下記になる

# 現在設定されているスケジュール確認
pmset -g sched

# 1回のみ実行.以下は起動させる場合
# ほかに sleep, wake, shutdown, wakeorpoweron がある.
sudo pmset schedule poweron "10/20/11 18:00|00"

# 繰り返し実行.曜日は MTWRFSU の部分集合で記述する
sudo pmset repeat shutdown RF 07:50:00

GUIじゃ最大2個のスケジュールしか登録できないが、pmsetとcronをうまく組み合わせれば実際何個でもスケジュールを登録できる!

注意する点

これでうまく行くかと思いきや、cronでpmsetが起動しなかった。
エラー文にはpmsetってそもそもroot権限でしか作動しないらしい。
なのでsudoのcrontabでスケジュールやらを設定する。

# rootにログイン
sudo su

# rootとしてcronを書く
crontab -e

実際に書いてみよう

例文は下記になる。

0 1 * * * /path/to/script1
1 1 * * * pmset repeat shutdown MTWRFSU 01:02:00 wakeorpoweron MTWRFSU 02:59:00

0 3 * * * /path/to/script2
1 3 * * * pmset repeat shutdown MTWRFSU 03:02:00 wakeorpoweron MTWRFSU 00:59:00

これを解釈すると
1. 01:00にscript1を実行する
2. 01:02にパソコンをシャットダウンさせることと、02:59にパソコンを起動させるスケジュールを01:01に登録する
3. 02:59にパソコンが起動する
4. 03:00にscript2を実行する
5. 03:02にパソコンをシャットダウンさせることと、翌日00:59にパソコンを起動させるスケジュールを03:01に登録することで原点に戻る

上記の原理でいくらでも定期的な命令を実行できるわけだ!
素晴らしい!以上!

参考になったサイト

https://apple.stackexchange.com/questions/56635/schedule-multiple-wake-up-times-for-mac
http://kapibara3kapibara3.blogspot.com/2019/03/pmsetmac.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】scaffoldを使用したRailsアプリケーションの生成手順

先日、scaffoldを初めて使ってみたのですが、めちゃめちゃ便利だったので、使用手順を中心に記事を書かせていただきます。

おそらく「scaffoldってなんだ?」という方もいらっしゃると思うので、まずはscaffoldについて簡単に記載します。

scaffoldとは?

Railsの開発に必要なルーティング、コントローラ、ビューの作成に加え、基本的なアクションの設定なども自動ですべてやってくれる便利ツールのこと

→もちろん、これを使って世の中に出すアプリケーションをつくるのは違う(というより無駄が多い)と思いますが、個人的には試しに機能を実装するための試作品をつくる上で、ベースとなるRailsのアプリケーションをなるべく工数かけずに作りたいと思っていたので、最近めちゃめちゃよく使っています。

ということで、以下scaffoldを使用したRailsアプリケーションの生成手順について記載しますので、もしよかったら参考にしてみてください。

scaffoldを使用したRailsアプリケーションの生成手順

<想定読者>
Railsを使用したアプリケーション開発の初学者
または、これからRailsを使用したアプリケーション開発を行いたいと考えている方

<環境やバージョン>
・MacOS
・Rails 5.2.3

まずは、通常通りrails newでrailsアプリケーションを作成しましょう。
※例ではtodoリストのアプリケーションをつくる想定で「todo_list」というアプリケーション名にしています。

ターミナル
$ rails new todo_list

コマンドを使用して作成したアプリケーション(todo_lint)へ移動

ターミナル
$ cd todo_list

いよいよ本題のscaffoldを使用した各種ファイルの生成を行います。
scaffoldを使用する場合、ターミナルで以下のコマンドを入力します。
$ rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2 …
こうすることにより、ルーティング、コントローラ、ビューのファイルだけではなく、モデルやマイグレーションファイルの作成も自動で行なってくれます。
※例では、content、priority、limitの3つのカラムを作成するための設定を行なっています。

ターミナル
$ rails g scaffold todo content:text priority:string limit:date

これでscaffoldを使用したRailsアプリケーションの雛形は作成できました。
最後に、作成されたマイグレーションファイルを元に、データベースのテーブル作成を実施しましょう。

ターミナル
$ rake db:migrate

以上でscaffoldを使用したアプリケーションの生成手順は終了です。

ローカルのサーバにアクセスすると、以下のページが表示されるかと思います。

スクリーンショット 2019-10-10 16.26.06.png

「ん?たしかに必要なファイルは作成されたけど、ビューファイルに記載された内容がブラウザに表示されない、、」という方↓

そうなんです。各種アクションやビューに対応したルーティングの設定はされていますが、rootの設定はされないので、そこは個別設定しましょう。

config/routes.rb
root to: "todos#index"

すると、以下のようにビューがきちんと表示されたかと思います。
スクリーンショット 2019-10-10 16.37.26.png

どうでした?簡単でしたよね?

ちなみに、今回作成したtodoリストの場合のその他のビューはこんな感じになります。
<todoの新規作成ページ>
alt

<todo一覧ページ>
スクリーンショット 2019-10-10 16.51.56.png

それでは、最後になりましたが、今回使用したscaffoldで生成された(もしくは追加、変更された)ファイルを記載しますので、今後のアプリケーション開発の参考にしてみてください。

①コントローラ
・app/controllers/todos_controller.rb
※作成されたコントローラのファイルには、自動で「index」「show」「new」「edit」「create」「update」「destroy」の7つのアクションが定義されています。そのため、これらのアクションを呼び出してデータの参照、作成、変更、削除をすぐに行うことができます。

②ルーティング
・config/routes.rb
※ファイルの中には「resources :todos」という記述が追加されており、上記のアクションに対応したルーティングが自動で設定されます。

③ビュー
・app/views/todos/index.html.erb
・app/views/todos/edit.html.erb
・app/views/todos/show.html.erb
・app/views/todos/new.html.erb
・app/views/todos/_form.html.erb
※コントローラーで定義されたアクションに対応するビューファイルが全て作成されています。

④モデル、およびマイグレーションファイル
・db/migrate/2019xxxxxxx_create_todos.rb
・app/models/todo.rb
※scaffoldを使用した各種ファイルの作成時に指定した情報を含む、モデルおよびマイグレーションファイルが自動生成されています。

【参考記事】
覚えておくと超便利!Ruby on Railsのscaffoldの使い方【初心者向け】
https://techacademy.jp/magazine/7204

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】scaffoldを使用したアプリケーションの生成手順

先日、scaffoldを初めて使ってみたのですが、めちゃめちゃ便利だったので、使用手順を中心に記事を書かせていただきます。

おそらく「scaffoldってなんだ?」という方もいらっしゃると思うので、まずはscaffoldについて簡単に。

scaffoldとは?

Railsの開発に必要なルーティング、コントローラ、ビューの作成に加え、基本的なアクションの設定なども自動ですべてやってくれる便利ツールのこと

→もちろん、これを使って世の中に出すアプリケーションをつくるのは違う(というより無駄が多い)と思いますが、個人的には試しに機能を実装するための試作品をつくる上で、ベースとなるRailsのアプリケーションをなるべく工数かけずに作りたいと思っていたので、最近めちゃめちゃよく使っています。

ということで、以下scaffoldを使用したRailsアプリケーションの生成手順について記載します。
本当に簡単なので、もしよかったら実際に使ってみて下さい。

scaffoldを使用したRailsアプリケーションの生成手順

<想定読者>
Railsを使用したアプリケーション開発の初学者
または、これからRailsを使用したアプリケーション開発を行いたいと考えている方

<環境やバージョン>
・MacOS
・Rails 5.2.3

まずは、通常通りrails newでrailsアプリケーションを作成しましょう。
※例ではtodoリストのアプリケーションをつくる想定で「todo_list」というアプリケーション名にしています。

ターミナル
$ rails new todo_list

コマンドを使用して作成したアプリケーション(todo_lint)へ移動

ターミナル
$ cd todo_list

いよいよ本題のscaffoldを使用した各種ファイルの生成を行います。
scaffoldを使用する場合、ターミナルで以下のコマンドを入力します。
$ rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2 …
こうすることにより、ルーティング、コントローラ、ビューのファイルだけではなく、モデルやマイグレーションファイルの作成も自動で行なってくれます。
※例では、content、priority、limitの3つのカラムを作成するための設定を行なっています。

ターミナル
$ rails g scaffold todo content:text priority:string limit:date

これでscaffoldを使用したRailsアプリケーションの雛形は作成できました。
最後に、作成されたマイグレーションファイルを元に、データベースのテーブル作成を実施しましょう。

ターミナル
$ rake db:migrate

以上でscaffoldを使用したアプリケーションの生成手順は終了です。

ローカルのサーバにアクセスすると、以下のページが表示されるかと思います。

スクリーンショット 2019-10-10 16.26.06.png

「ん?たしかに必要なファイルは作成されたけど、ビューファイルに記載された内容がブラウザに表示されない、、」という方↓

そうなんです。各種アクションやビューに対応したルーティングの設定はされていますが、rootの設定はされないので、そこは個別設定しましょう。

config/routes.rb
root to: "todos#index"

すると、以下のようにビューがきちんと表示されたかと思います。
スクリーンショット 2019-10-10 16.37.26.png

どうでした?簡単でしたよね?

ちなみに、今回作成したtodoリストの場合のその他のビューはこんな感じになります。
<todoの新規作成ページ>
alt

<todo一覧ページ>
スクリーンショット 2019-10-10 16.51.56.png

それでは、最後になりましたが、今回使用したscaffoldで生成された(もしくは追加、変更された)ファイルを記載しますので、今後のアプリケーション開発の参考にしてみてください。

①コントローラ
・app/controllers/todos_controller.rb
※作成されたコントローラのファイルには、自動で「index」「show」「new」「edit」「create」「update」「destroy」の7つのアクションが定義されています。そのため、これらのアクションを呼び出してデータの参照、作成、変更、削除をすぐに行うことができます。

②ルーティング
・config/routes.rb
※ファイルの中には「resources :todos」という記述が追加されており、上記のアクションに対応したルーティングが自動で設定されます。

③ビュー
・app/views/todos/index.html.erb
・app/views/todos/edit.html.erb
・app/views/todos/show.html.erb
・app/views/todos/new.html.erb
・app/views/todos/_form.html.erb
※コントローラーで定義されたアクションに対応するビューファイルが全て作成されています。

④モデル、およびマイグレーションファイル
・db/migrate/2019xxxxxxx_create_todos.rb
・app/models/todo.rb
※scaffoldを使用した各種ファイルの作成時に指定した情報を含む、モデルおよびマイグレーションファイルが自動生成されています。

【参考記事】
覚えておくと超便利!Ruby on Railsのscaffoldの使い方【初心者向け】
https://techacademy.jp/magazine/7204

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】scaffoldを使用したアプリケーションの作成手順

先日、scaffoldを初めて使ってみたのですが、めちゃめちゃ便利だったので、scaffoldを使用したRailsアプリケーションの作成手順について記事を書かせていただきます。

おそらく「scaffoldってなんだ?」という方もいらっしゃると思うので、まずはscaffoldについて簡単に。

scaffoldとは?

Railsの開発に必要なルーティング、コントローラ、ビューの作成に加え、基本的なアクションの設定なども自動ですべてやってくれる便利ツールのこと

【個人的に感じたscaffoldの良さ】
①コントローラの作成だけでなく、7つの基本アクションも自動で設定してくれる
scaffoldで作成されたコントローラには、「index」「show」「new」「edit」「create」「update」「destroy」の7つのアクションが自動で定義されています。そのため、自分でアクションを設定しなくても、すぐにデータの参照や新規作成、変更、削除を行うことができます。

②作成されたコントローラに対応するルーティングも自動で設定してくれる
scaffoldコマンド後のroutes.rbには、「resources :コントローラ名」という記述が追加されており、新たに作成されたコントローラに対応するルーティングが自動で設定されています。

③コントローラで定義されたアクションに対応するビューも全て自動生成してくれる
scaffoldを使用した場合、コントローラで定義されたアクションに対応するビューファイルも全て自動で生成されます。

④必要なモデルおよびマイグレーションファイルも自動生成してくれる
scaffoldでは、コマンド入力時に「カラム名:データ型」を指定すると、指定された情報を含むモデルおよびマイグレーションファイルを自動生成してくれます。
そのため、あとは「$ rake db:migrate」コマンドを入力するだけで、データベースのテーブルも簡単に作成できます。(この辺りの詳細は後ほど)

→もちろん、scaffoldを使って世の中に出すアプリケーションをつくるのはちょっと違う(というより逆に無駄が多い)と思いますが、個人的には興味のある機能を試しに実装するための試作品をつくる上ではめちゃめちゃ便利だなと感じています。

ということで、以下scaffoldを使用したRailsアプリケーションの作成手順について記載します。
本当に簡単なので、もしよかったら実際に使ってみて下さい!

scaffoldを使用したRailsアプリケーションの生成手順

<想定読者>
Railsを使用したアプリケーション開発の初学者
または、これからRailsを使用したアプリケーション開発を行いたいと考えている方

<環境やバージョン>
・MacOS
・Rails 5.2.3

<作成手順>
まずは、通常通りrails newでrailsアプリケーションを作成しましょう。
※例ではtodoリストのアプリケーションをつくる想定で「todo_list」というアプリケーション名にしています。

ターミナル
$ rails new todo_list

コマンドを使用して作成したアプリケーション(todo_lint)へ移動

ターミナル
$ cd todo_list

いよいよ本題のscaffoldを使用した各種ファイルの生成を行います。
scaffoldを使用する場合、ターミナルで以下のコマンドを入力します。
$ rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2 …
こうすることにより、ルーティング、コントローラ、ビューのファイルだけではなく、モデルやマイグレーションファイルの作成も自動で行なってくれます。
※例では、content、priority、limitの3つのカラムを作成するための設定を行なっています。

ターミナル
$ rails g scaffold todo content:text priority:string limit:date

これでscaffoldを使用したRailsアプリケーションの雛形は作成できました。
最後に、作成されたマイグレーションファイルを元に、データベースのテーブル作成を実施しましょう。

ターミナル
$ rake db:migrate

以上でscaffoldを使用したアプリケーションの作成手順は終了です。
いかがでした?めちゃめちゃ簡単じゃないですか?

ちなみに、ここでローカルのサーバにアクセスしてみると、以下のページが表示されるかと思います。

スクリーンショット 2019-10-10 16.26.06.png

「ん?たしかに必要なファイルは作成されたけど、ビューファイルに記載された内容がブラウザに表示されない、、」という方↓

そうなんです。各種アクションやビューに対応したルーティングの設定はされていますが、rootの設定はされないので、そこは個別設定しましょう。

config/routes.rb
root to: "todos#index"

すると、以下のようにビューがきちんと表示されたかと思います。
これでもう完璧ですね!
スクリーンショット 2019-10-10 16.37.26.png

参考までにですが、今回作成したtodoリストの場合、その他のビューはこんな感じになります。
<todoの新規作成ページ>
alt

<todoリストの一覧ページ>
スクリーンショット 2019-10-10 16.51.56.png

それでは、最後になりましたが、今回使用したscaffoldで生成された(もしくは追加、変更された)ファイルを記載しますので、もし興味があれば今後のアプリケーション開発の参考にしてみてください。

①コントローラ
・app/controllers/todos_controller.rb

②ルーティング
・config/routes.rb
※ファイルの中には「resources :todos」という記述が自動追加

③ビュー
・app/views/todos/index.html.erb
・app/views/todos/edit.html.erb
・app/views/todos/show.html.erb
・app/views/todos/new.html.erb
・app/views/todos/_form.html.erb

④モデル、およびマイグレーションファイル
・db/migrate/2019xxxxxxx_create_todos.rb
・app/models/todo.rb

【参考記事】
覚えておくと超便利!Ruby on Railsのscaffoldの使い方【初心者向け】
https://techacademy.jp/magazine/7204

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2作成からSSH接続

前提条件

AWSアカウントを持っていて、AWSコンソールにアクセスできる

EC2の作成

  • AWSコンソールにアクセス
  • サービスよりEC2へ
  • インスタンスの作成
  • Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type - ami-92df37edを選択して、インスタンスを作成

※キーペアを作成した場合、保存場所を忘れないように!
  接続するのに使います

作成後のダッシュボード画面

スクリーンショット 2018-06-24 9.33.40.png

  • 作成したインスタンスを選択後、接続ボタンをクリック
  • 接続方法が表示される

一部抜粋

インスタンスにアクセスするには:
SSH クライアントを開きます。 (PuTTY を使用した接続の方法を確認)
プライベートキーファイル (***.pem) を見つけます。ウィザードが、インスタンスを作成するために使用するキーを自動的に検出します。
SSH が機能するには、キーが公開されていないことが必要です。必要な場合は次のコマンドを使用します。
chmod 400 ***.pem
インスタンスに接続するには、パブリック DNS を使用します。
EC2インスタンス名が表示されている
例: 
ssh -i "プライベートキー" ec2-user@"EC2のパブリックDNS名"
ほとんどの場合、上のユーザー名は正確ですが、AMI の使用方法を読んで AMI 所有者がデフォルト AMI ユーザー名を変更していないことを確認してください。
インスタンスへの接続に関してアシスタンスが必要な場合は、接続ドキュメントを参照してください。

ターミナルでの接続

$ キーペアのあるディレクトリに移動

$ chmod 400 ***.pem

$ ssh -i "***.pem" ec2-user@"EC2のパブリックDNS名"

The authenticity of host 'ec2-*-*-*-*.ap-northeast-1.compute.amazonaws.com (*.*.*.*)' can't be established.
ECDSA key fingerprint is SHA256:aDABcIu4l1SfKoEZwPpyGPcrXvmh2kiaIvaGxpkOazY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-*-*-*-*.ap-northeast-1.compute.amazonaws.com,*.*.*.*' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
11 package(s) needed for security, out of 13 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip**** ~]$ 

$マークの左側が[ec2-user@ip**** ~]になっていれば、SSH接続が完了

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Markdownをコンソール上でプレビュー

何がしたかったのか?

昭和生まれなもんで、GUIとかよう使われへん(エセ関西弁)

入手方法

https://github.com/tksmiura/miro

ここに入っているmiroというファイルをパスの通っておくところにコピーするだけ

実行方法

$ miro <markdown file>

実行結果

test_screenshot1.png
test_screenshot2.png

listとかテーブルとかちょっと頑張った。

課題

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOS Catalinaで(古い)VMware Fusion だと画面が真っ暗になった。

私は古いバージョンのVMware Fusion 7をしつこく使ってるんですが、macOS Catalinaにアップデートしたところ、仮想マシンの画面が真っ暗になってしまいました。

一回他のバージョンのVMware Fusionをインストールして云々という情報もあったので試したんですが自分の環境ではうまくいきませんでした。

最新版にするお金をかけるほど使ってないんですよね〜悩みますね。

ふと仮想マシンのライブラリ画面をみるとこちらではプレビューできてます。あれ?じゃぁ動いていないわけじゃなくて画面だけの問題??

そういえばVNC使える設定あったよなと設定してみました。

スクリーンショット 2019-10-12 20.42.15.png

MacのほうはFinder>移動>サーバーへ接続から、vnc://127.0.0.1:5901で接続したところうまくいきました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでRailsにgem mysql2をインストールする時のトラブルシューティング

はじめに

2019年10月現在MacでRailsアプリ開発時にDBにMySQLを選択する場合、デフォルトではmysql2というgemをインストールします。
その時にいくつかエラーに出会ったので、まとめておきます。

実行環境

  • macOS Mojave v10.14.6
  • ruby v2.6.4
  • Rails v6.0.0

MySQLのクライアントが必要

MacにMySQLクライアントをインストールしていない場合、以下のようなエラーが表示されます。

Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/hogehoge/sample-app/vendor/bundle/gems/mysql2-0.5.2/ext/mysql2
/Users/hogehoge/.rbenv/versions/2.6.4/bin/ruby -I /Users/hogehoge/.rbenv/versions/2.6.4/lib/ruby/2.6.0 -r
./siteconf20191012-40688-181m253.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
checking for -lmysqlclient... no
-----
mysql client is missing. You may need to 'brew install mysql' or 'port install mysql', and try again.

Homebrewなどでインストールしておきましょう。
なお、2019年10月現在gemが対応しているバージョンは以下のようですので、採用バージョンに応じたものをインストールしましょう。

This gem is tested with the following MySQL and MariaDB versions:
MySQL 5.5, 5.6, 5.7, 8.0
MySQL Connector/C 6.0 and 6.1 (primarily on Windows)
MariaDB 5.5, 10.0, 10.1, 10.2, 10.3

(https://github.com/brianmario/mysql2 READMEより引用)

# MySQL最新バージョン(8.0)
$ brew install mysql

# 5.xの場合
$ brew install mysql@5.x

5.x系の場合はmysqlコマンドを使えるよう以下のようにPATHを通しておきましょう。

$ export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"

bundle install時のlinkerエラー

無事MySQLクライアントをインストールできていても、以下のようなエラーが起こる場合があります。

Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/hogehoge/sample-app/vendor/bundle/gems/mysql2-0.5.2/ext/mysql2
/Users/hogehoge/.rbenv/versions/2.6.4/bin/ruby -I /Users/hogehoge/.rbenv/versions/2.6.4/lib/ruby/2.6.0 -r
./siteconf20191012-62886-155hohe.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... yes
checking for MYSQL.net.pvio in mysql.h... no
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... no
-----
Dont know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/8.0.17_1/lib
-----
creating Makefile

current directory: /Users/hogehoge/sample-app/vendor/bundle/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/hogehoge/sample-app/vendor/bundle/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

以下がこのエラーの原因で、ざっくり言うとgemのビルド時に、必要なopensslライブラリを見つけられないために発生しています。

ld: library not found for -lssl

詳細な原因は以下記事が大変参考になります。
https://qiita.com/HrsUed/items/ca2e0aee6a2402571cf6

解決策としては、bundle install時に以下オプションでpathを指定する必要があります。

  • --with-cppflags
  • --with-ldflags

brew infoでインストールされているopensslを確認すると、自分の環境のLDFLAGSとCPPFLAGSのpathが確認できます。

$ brew info openssl@1.1

openssl@1.1: stable 1.1.1d (bottled) [keg-only]
...
For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
...

こちらのpathをbundle configで設定してからインストールしましょう。

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl@1.1/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib"
$ bundle install

以上、自分が遭遇したエラー内容でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macから毎朝メール(gmail)を送信しよう

ご挨拶

こんにちは。台風大丈夫でしょうか。2019/10/12
毎朝、天気などの情報がメールで配信されるといいなと思いまして、
まずはメールを毎朝配信する仕組みを作ってみました。
メールサーバとか、よくわからないのでGoogleさんを使います。

全体像

  • msmtpをbrewでインストール
  • 設定ファイルの作成
  • 送信するメールのテキストファイルの作成
  • cronを仕込む

msmtpをbrewでインストール

$ brew install msmtp

設定ファイルの作成

$ vi ~/.msmtprc

設定ファイルの中身は以下の通り

host smtp.gmail.com
port 587 
user sample@gmail.com  <- ここは自分のアカウントにして下さい
password hogehoge
from sample@gmail.com <- ここは自分のアカウントにして下さい
tls on
tls_starttls on
tls_certcheck off
auth on
logfile ~/.msmtp.log

パスワード情報入ってますので、権限を設定します。

$ chmod 600 ~/.msmtprc

あと、googleアカウント側の設定から [安全性の低いアプリの許可] をオン にして下さい。


送信するメールのテキストファイルの作成

$ vi ~/mailsample.txt

テキストファイルの中身は以下の通り

From: sample@gmail.com
To: tosample@gmail.com <- ここは送りたいメール宛先にして下さい
Subject: test
           <- ここ1行あけて下さい
Hello,
This is test email.
Thanks,

cronを仕込む

毎朝7時15分にメールを送る設定にします。

$ crontab -e

vi開くので以下を保存します。

15 7 * * * bash -l -c 'cat /Users/testuser/mailsample.txt | msmtp -t'

それでは、7時15分を楽しみに待ちましょう。
Thanks,

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

完全無料でクラウドストレージを構築する【NextCloud】

完全無料でクラウドストレージを構築する【NextCloud】

まえがき

この記事では完全無料でプライベートクラウドストレージサーバを構築することを目標とします。また、この記事でなるべく全てを完結できるように最低限の操作だけを書いています。ご了承ください。

構築目安:2時間(※アップデートやダウンロードで時間がかかるので)

この記事を読んでできること

  • NextCloud(ストレージサーバ)の構築
  • 固定ドメインの取得(Serveo)

この記事でしないこと

  • SSL化(近日更新予定)

環境

構築した環境、準備したものは以下の通りです。VirtualBoxがあればWindowsでも大丈夫(なはず)です。

仮想マシンを構築する

まず、VirtualBoxで仮想マシンを構築します。ここはあまりややこしいところは無いと思いますので簡単に要点だけ書いておきます。
1. 「新規(N)」をクリック。名前は適当につけてタイプは「Linux」、バージョンは「Red Hat(64-bit)」を選択します。
2. RAMですがNextCloudの公式には最低128MB、推奨は512MBと書いているので1024MBあれば十分でしょう。
3. ハードディスクはデフォルトの「仮想ハードディスクを作成する」、ファイルタイプもデフォルトの「VDI」にしておきます。
4. 物理ハードディスクにあるストレージは「固定サイズ」にします。(次で容量を設定しますが、後からでも変更可能です)
5. ファイルの場所とサイズはこの時点ではなんでもいいです。特に触る必要はありません。ここまでで一旦仮想マシンを「作成」します。
〜数分待機〜
6. 出来た仮想マシンを起動します。ダウンロードしたCentOS7 minimalをディスクイメージに選択し、「Start」します。
7. 「Install CentOS7」を選択。GUIが起動するので、言語を日本語にし「続行」します。
8. インストールの概要は特に触らなくていいでしょう。「インストール先」だけ一度中身を確認しないと次に進めないのでクリックし「インストールを開始(B)」します。
9. rootユーザのパスワードを設定します。
〜数分待機〜
10. 「再起動(R)」し、rootユーザでログインします。

初期設定

この時点では、ネットワーク設定が初期設定のままで繋がらないのでネットワーク設定を変更します。今回はもっとも簡単なブリッジネットワークにしておきます。(VirtualBoxのネットワーク設定まとめはこちら

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
///ONBOOTをyesに変更

- ONBOOT=no
+ ONBOOT=yes

# shutdown -h now

シャットダウンしたらVirtualBoxで「設定(S)」→「ネットワーク」→「ブリッジネットワーク」に変更し、再び起動します。これで外部ネットワークにも繋がるはずです。ちなみにここから長いコマンドをたくさん打つ必要があります。VirtualBoxのウィンドウではコピペができないので、SSH(パスワード認証)を有効にしてターミナルから操作すると楽でしょう。

# vi /etc/ssh/sshd_config

//インストールが全て終わったらまたコメントアウトしておきましょう
- #PermitRootLogin
+ PermitRootLogin

# systemctl enable sshd.service
# systemctl start sshd.service
# ip a (IPアドレスを確認しておきましょう)

//ターミナルなどからアクセス
# ssh root@192.0.2.10

NextCloudインストール

ここからが本題です。インストール途中で何かミスると嫌なので一度ここで(この後も適宜)スナップショットを取っておきましょう。
基本的に公式の手順に沿っていきます。

# yum install -y epel-release yum-utils unzip curl wget bash-completion policycoreutils-python mlocate bzip2
# yum update -y
〜数分待機〜
// Apacheインストール
# yum install -y httpd

//ファイルを新規作成
# vi /etc/httpd/conf.d/nextcloud.conf
<VirtualHost *:80>
  DocumentRoot /var/www/html/
  ServerName  example.serveo.net(exampleの部分は自由)

<Directory "/var/www/html/">
  Require all granted
  AllowOverride All
  Options FollowSymLinks MultiViews
</Directory>
</VirtualHost>

# systemctl enable httpd.service
# systemctl start httpd.service

# yum install -y centos-release-scl
# yum install -y rh-php72 rh-php72-php rh-php72-php-gd rh-php72-php-mbstring rh-php72-php-intl rh-php72-php-pecl-apcu rh-php72-php-mysqlnd rh-php72-php-pecl-redis rh-php72-php-opcache rh-php72-php-imagick
〜数分待機〜

# ln -s /opt/rh/httpd24/root/etc/httpd/conf.d/rh-php72-php.conf /etc/httpd/conf.d/
# ln -s /opt/rh/httpd24/root/etc/httpd/conf.modules.d/15-rh-php72-php.conf /etc/httpd/conf.modules.d/
# ln -s /opt/rh/httpd24/root/etc/httpd/modules/librh-php72-php7.so /etc/httpd/modules/
# ln -s /opt/rh/rh-php72/root/bin/php /usr/bin/php

// MariaDBインストール
# yum install -y mariadb mariadb-server

# systemctl enable mariadb.service
# systemctl start mariadb.service

MariaDB初期設定

# /usr/bin/mysql_secure_installation
Enter current password for root (enter for none): (空欄でEnter)
Set root password? [Y/n] Y
New password: (MariaDBのrootパスワード入力)
Re-enter new password: (再度入力)
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

# mysql -uroot -p
Enter password:(MariaDBのrootパスワード)
MariaDB [(none)]> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS nextcloud;
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON nextcloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH privileges;
MariaDB [(none)]> quit

NextCloudダウンロード

# wget https://download.nextcloud.com/server/releases/nextcloud-15.0.0.tar.bz2
〜数分待機〜
# wget https://download.nextcloud.com/server/releases/nextcloud-15.0.0.tar.bz2.md5

# tar xf nextcloud-15.0.0.tar.bz2
# cp -R nextcloud/ /var/www/html/

# mkdir /var/www/html/nextcloud/data
# chown -R apache:apache /var/www/html/nextcloud

# systemctl restart httpd.service

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --reload

# yum install -y redis
# systemctl enable redis.service
# systemctl start redis.service

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.htaccess'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

# restorecon -R '/var/www/html/nextcloud/'
# setsebool -P httpd_can_network_connect on

ここで、ブラウザからhttp://(サーバのIPアドレス)/nextcloud/にアクセスすると初期設定画面が表示されます。管理者アカウントのユーザ名とパスワードを設定し、セットアップを完了します。これでNextCloudの完成です!

固定ドメインの取得

次は家の外からでもアクセスできるように固定ドメインを取得します。無料で取得できるドメインサービスはたくさんありますが、特に簡単にできると思ったServeoを使いたいと思います。これは特定のURLにSSHを行うだけです。さらにサブドメインも指定できるのでちょっとうれしいです。普通のSSHだと定期的な更新が必要そうなのでautosshコマンドをバックグラウンドで使いましょう。

# vi /var/www/html/nextcloud/config/config.php
- 0 => '192.0.2.10',
+ 0 => '192.0.2.10','example.serveo.net'

# ssh -R example(自由なサブドメイン):80:localhost:80 serveo.net
//初回接続をして、ブラウザでhttp:/example.serveo.net/nextcloud/にアクセスできることを確認

Ctrl+C

# yum install -y autossh
# autossh -f -M 0 -R example(自由なサブドメイン):80:localhost:80 serveo.net

これで固定ドメインでのプライベートクラウドストレージの完成です!!お疲れ様でした〜

Tips

関連して使いそうなことをまとめておきます。

仮想マシンのバックグラウンド起動(Headless)

# VBoxManage startvm 仮想マシン名 --type headless

仮想マシンの容量変更

//ホストマシンで
VBoxManage modifyhd vdiファイル --resize 変更するサイズ(MB)

autosshの切断

# pkill -9 autossh

あとがき

あくまで私の環境での構築手順です。訂正、補足、こんなところでエラーが出たなどあればコメントいただけると幸いです。(ちなみに実際に使ってみると激遅なので実用的ではないかもしれません。ちょっと考えます...)

参考URL

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macでGitHubからレポジトリをクローンできない時の対処法

症状

macOSでGitHub Desktopでレポジトリをクローンしようとすると

Cloning into '/Users/XXX/XXX'…  
fatal: unable to access 'https://github.com/XXX/XXX': LibreSSL SSL_connect:  
SSL_ERROR_SYSCALL in connection to github.com:433

と表示されてクローンできない。

参照

https://entotsu44.hatenablog.com/entry/2019/10/12/063000

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

brewでRictyがインストールできない!

はじめに

macでCatalinaがリリースされましたね!
皆さんはインストールしましたか??
私はリリース翌日にインストールしましたが、32bit対策を事前にしていたので、特に問題なく利用できています。
私は新しいmacOSがリリースされるたびにクリーンインストールをしていますが、brewでRictyをインストールした際にエラーが出たので、同じ症状に悩む人がいる可能性も考えて執筆しました。
結論を言うと何も解決できていません。
自分だけじゃないのか!と安心してください。

症状

下記コマンドを実行するとエラーが出る。

command
$ brew tap sanemat/font
$ brew install sanemat/font/ricty
Updating Homebrew...
==> Installing ricty from sanemat/font
==> Downloading http://www.rs.tus.ac.jp/yyusa/ricty/ricty_generator-4.1.0.sh
==> Downloading from https://www.rs.tus.ac.jp/yyusa/ricty/ricty_generator-4.1.0.sh

curl: (22) The requested URL returned error: 403 Forbidden
Error: An exception occurred within a child process:
  DownloadError: Failed to download resource "ricty"
Download failed: http://www.rs.tus.ac.jp/yyusa/ricty/ricty_generator-4.1.0.sh

調査結果

403Forbiddenが出ているので、アドレス先の有効性について調査。

http://www.rs.tus.ac.jp/
上記URLは東京理科大学教職員のHPらしい。アクセス可能
http://www.rs.tus.ac.jp/yyusa/
上記URLは東京理科大学に所属している遊佐泰紀助教のページらしいが、現在アクセス不可となっている。
researchmapで調べてみると2019年9月まで東京理科大学の嘱託助教と記載があるので、御退任された可能性がある。
そのため、東京理科大学上に置かれているシェルスクリプトにアクセスできなくなり、Download failedとなったと考えられる。

結論

brewでRictyをインストールする際のシェルスクリプトが大学教員が作成したシェルスクリプトであったが、御退任に伴い、アクセス不可となった。
brew側にそれを伝える方法があればコメントください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacのTerminalの文字色変更

Terminalの文字が全て白色だと見づらいですよね。

この方法をとるとterminalに表示される文字のうち
現在のディレクトリ(フォルダ)が青く表示されます。
また、lsコマンドを実行した時も青になります。

こんな感じです。(現在のディレクトリは〜です。ルートフォルダといいます)
Screen Shot 2019-10-12 at 1.44.09.png

手順1 ターミナルで以下入力
vi ~/.bash_profile

手順2 キーボードiを押す(左下に「-- INSERT --」と出る)

手順3 ターミナルで以下入力
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Screen Shot 2019-10-12 at 1.54.25.png
手順4 escキー押して:wqと入力、エンター
ターミナルが元の表示に戻るはずです。

手順5 ターミナルで以下入力
vi ~/.bashrc

手順6 キーボードiを押す(左下に「-- INSERT --」と出る)

手順7 ターミナルで以下入力。色は画像を参考に変更可
alias ls='ls -G'
alias ll='ls -lG'
alias la='ls -laG'
PS1='[\e[34m]\w [\e[37m]\$[\e[0m] '
Screen Shot 2019-10-12 at 2.07.34.png
PS1=〜の中の数値により文字色変更できます。
\e[34m]\wで現在のディレクトリ(フォルダ名)を青色、
\e[37m]\$で$マークを白色に指定している。

なお、自分で打つコマンドの色はターミナルを開いて画面左上の
Terminal - Preferences - Profiles - Textの脇の白い
ボックスを押すと色を選べます。

この記事はこのリンク先を参照しました。
この記事はこのリンク先を参照しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macのputtygenで秘密鍵から公開鍵を作る

win機でのputtygen操作は引っかかっても、macのコンソールから実行するようなコマンドは
意外とすぐに引っかからなかったので備忘録として書いてみます。需要があれば

秘密鍵 -> 公開鍵

puttygen (秘密鍵ファイル名) -O (変換形式) -o (生成する公開鍵ファイル名)

出力形式として指定できるのは次の通り

public: ssh.com(SECSH)形式の公開鍵として変換
public-openssh: OpenSSH形式の公開鍵として変換

一例

puttygen hoge.ppk -O public-openssh -o hoge.pub
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む