アトトック代表の開発ブログ

プログラミングのことや趣味のことなど書いてます。

Carthageでライブラリを管理する

今までXcodeのライブラリの管理はCocoaPodで管理していましたが、メインの言語をSwiftに変更するのに合わせてCarthageを使ってみます。

CarthageのQuick Startを参考に進めます。

前提条件

macOSにHomebrewがインストールされていること

Carthageをインストール

インストール方法は、こちらに記載されています。
インストール方法は下記の3つの方法があります。

  • パッケージをダウンロードしてインストール
  • Homebrewでインストール
  • ソースを取得しmake install

今回はHomebrewでインストールします。

$ brew install carthage


$ carthage version
0.29.0

carthage 0.29.0がインストールされました。

Cartfileを作成

プロジェクトのフォルダにCartfileを作成しインストールするライブラリを定義します。
今回のプロジェクトで使用するAPIKitを設定してみます。

github "ishkawa/APIKit" ~> 3.1

ライブラリをインストール

carthage updateでライブラリをインストールします。
platformを指定しないとiOSMac、tvOS、watchOSのプラットフォームのライブラリがビルドされます。

$ carthage update
*** Cloning APIKit
*** Cloning Result
*** Checking out APIKit at "3.2.1"
*** Checking out Result at "3.2.4"
*** xcodebuild output can be found in /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/carthage-xcodebuild.yOJLMa.log
*** Building scheme "Result-iOS" in Result.xcodeproj
*** Building scheme "Result-Mac" in Result.xcodeproj
*** Building scheme "Result-tvOS" in Result.xcodeproj
*** Building scheme "Result-watchOS" in Result.xcodeproj
*** Building scheme "APIKit" in APIKit.xcworkspace

iOS用のライブラリだけインストールしたい場合は、platformオプションでiosを指定します。

$ carthage update --platform ios
*** Fetching APIKit
*** Fetching Result
*** Checking out APIKit at "3.2.1"
*** Checking out Result at "3.2.4"
*** xcodebuild output can be found in /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/carthage-xcodebuild.7l8sek.log
*** Building scheme "Result-iOS" in Result.xcodeproj
*** Building scheme "APIKit" in APIKit.xcworkspace

carthage updateを実行するとプロジェクトフォルダにCartfile.resolvedが作成されます。

github "antitypical/Result" "3.2.4"
github "ishkawa/APIKit" "3.2.1"

ビルドしたライブラリは、Carthage/Build/iOSに保存されます。
Cartfileに設定したAPIKitはCarthage/Build/iOS/APIKit.frameworkが作成されます。

FrameworkをXcodeのプロジェクトに追加

ビルドされたFrameworkをXcodeのプロジェクトに追加します。
Xcodeのプロジェクトを開き、TARGETを選択し「Linked Frameworks and Libraries」にビルドしたライブラリを追加します。

f:id:kurusaki:20180724083032p:plain

Run Scriptを設定

Build Phasesの+ボタンから「New Run Script Phase」を選択しRun Scriptを追加します。

f:id:kurusaki:20180724083300p:plain

Shellの下のScript欄に下記の内容を追加します。

/usr/local/bin/carthage copy-frameworks

f:id:kurusaki:20180724083407p:plain

Input Filesを設定

Input Filesに使用するFrameaorkのパスを追加します。

$(SRCROOT)/Carthage/Build/iOS/APIKit.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework

f:id:kurusaki:20180724083519p:plain

確認

今回は、APIKitを追加したのでFrameworkが使用できるかimportしてビルドしてみます。

f:id:kurusaki:20180724083610p:plain

問題なくビルドできました。
これでとりあえず開発を進められます。



アトトックラボ

Visual Studio Codeでruby-debug-ideを使ってデバッグ

会社では開発メンバーそれぞれが好きなエディタを使ってRailsアプリ開発を行なっています。
以前はAtomを使っていましたが、Atomプラグインを入れすぎたからか重くなったので ここ1年くらいはVisual Studio Codeを使いデバッグはpryです。

Visual Studio Codeを使っていると右側にDebuggingアイコンが表示されています。
今まであまり気にしていなかったのですが
これ、どうやって使うんだと思い使ってみました。

デバッガーをインストール

ruby-debug-ideとdebaseをインストールします。

必要なGemをGemfileに追加

ruby-debug-ideとdebaseをGemfileに追加します。

  gem "ruby-debug-ide"
  gem "debase"

bundle install

$ bundle install --path vendor/bundle

ruby-debug-ideをインストール

$ gem install ruby-debug-ide

アプリを実行してみる

構成の追加

Visual Studio codeの左側のDebuggingアイコンを選択するとデバッグビューが表示されます。 デバッグビューには変数、ウォッチ式、コールスタック、ブレークポイントがあり、上部のプルダウンメニューに「構成がありません」表示されています。

f:id:kurusaki:20180720035210p:plain

このプルダウンメニューから「構成の追加...」を選択すると環境(言語)が表示されるのでRubyを選択します。

f:id:kurusaki:20180720035233p:plain

Rails serverを選択

Rubyを選択すると、.vscode/launch.jsonが作成されデバッグビュー上部のプルダウンメニューに下記の項目が表示されます。

  • Debug Local File
  • Listen for rdebug-ide
  • Rails server
  • RSpec - all
  • RSpec - active spec file only
  • Cucumber

Railsのアプリをデバッグしたいので「Rails server」を選択します。

f:id:kurusaki:20180720035330p:plain

ブレークポイントの設定

ブレークポイントを設定したいソースを開きブレークポイントを設定したい行番号の左側をクリックすると、ブレークポイントが設定されデバッグビューのブレークポイントに表示されます。

f:id:kurusaki:20180720035350p:plain

実行

アプリを起動

デバッグビューの上部にある▶︎の実行ボタンをクリックするとアプリケーションが起動し、デバッグコンソールにログが出力されます。

f:id:kurusaki:20180720035414p:plain

ブレークポイントを設定したページを開く

ブレークポイントを設定したページを開くとブレークポイントを設定したところで停止し、デバッグビューに変数の状態が表示されます。

変数を右クリックするとメニューが表示されます。

f:id:kurusaki:20180720035438p:plain

デバッグ:ウォッチに追加」を選択すると変数がウォッチ式に追加され状態を確認できます。

f:id:kurusaki:20180720035501p:plain

続行、ステップオーバー、ステップイン、ステップアウト、再起動、停止ボタンでデバッグを続けます。

f:id:kurusaki:20180720035519p:plain

デバッグコンソールの下の入力エリアに変数名を入力しエンターキーを押すと、デナッグコンソールに変数の状態を表示できます。

f:id:kurusaki:20180720035534p:plain





久々にIDEのデバッガを使ってみました。

今後はpryよりpryとruby-debug-ideを使うことが多くなりそうです。



アトトックラボ

RailsでLIKE句のキーワードをサニタイズする

RailsでLIKE句のキーワードをサニタイズする場合、sanitize_sql_likeヘルパーを使います。

下記のようにモデルにスコープを定義しLIKE句で検索してみます。

class Setting < ApplicationRecord
  scope :search, ->(keyword) {
    where('setting_key like ?', "%#{sanitize_sql_like(keyword)}%")
  }
end

このメソッドをrails cで実行してみます。

[2] pry(main)> Setting.search("100%abc")
  Setting Load (0.7ms)  SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\%abc%')

%がエスケープされます。

[6] pry(main)> Setting.search("100_abc")
  Setting Load (6.0ms)  SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\_abc%')

_がエスケープされています。

[9] pry(main)> Setting.search("100\\abc")
  Setting Load (0.6ms)  SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\\\abc%')

\がエスケープされています。

実行環境



アトトックラボ

Railsのモデルのhas_manyに外部キーを指定する

Railsで開発しているとRailsの規約に乗っていればサクサクと開発できることが多いのですが、ときどきレールから外れないとしょうがない場合があります。
例えば別のシステムで開発したテーブルを利用する場合に、参照先のテーブルのIDがRailsの規約と合っていない場合があります。
fugasというテーブルにhogesテーブルのidを保持する場合、Railsの規約ではhoge_idとなりますが、規約から外れてhogehoge_idになっていた場合など一手間必要です。
Hogeモデルにhas_manyでfugasを指定したい場合は、has_manyにforeign_keyで外部キーのhogehoge_idを指定します。


こんな感じ

class Hoge < ApplicationRecord
  has_many :fugas, foreign_key: 'hogehoge_id', class_name: 'Fuga', dependent: :destroy
end



アトトックラボ

Let’s EncryptでSSL証明書の更新作業から解放されたい

Let’s Encryptは2016年4月に正式に開始された認証局で、無料で利用できるSSL証明書を提供しています。
Let’s Encryptコマンドラインcertbotを使用するとSSL証明書の取得や更新が自動化できるようになります。


SSL証明書のインストールって簡単だけどなんか煩わしくて嫌な作業だったりします。

そういう面倒な作業からは解放されたい!
いつもそう思いながら作業してます。

最近は、Google Chrome 66, 70 の対応でSSL証明書の更新作業がいくつもあったりと....

そこで、Let’s Encryptを試してみました。


Let’s Encryptコマンドラインcertbotを使用するとSSL証明書の取得や更新を自動化できるようになります。
SSL証明書の取得かたnginxの設定までコマンド一発でやってくれたりします。
SSL証明書の更新もcronなどで実行すれば自動化も可能です。
かなり楽です。
楽すぎます。

SSL証明書の取得方法や更新方法などアトトックラボの方にまとめました。

atotok.co.jp

まずは社内の開発環境をLet’s Encryptに移行してみようかと思います。
自社のサイトもLet’s Encryptでいいかも。


受託開発でもスマホアプリと連携するようなサイトなどLet's Encrypで十分じゃないのかな?
しばらく使ってみてどこまで利用するか検討してみようと思います。



アトトックラボ

Dialogflowでチャットボットの開発

最近、チャットボット関係の開発の話があり独自実装だったり、いろんなサービスを試したりしてます。
今回は最近使ってみたGoogleのDialogflowを紹介したいと思います。
DialogflowはGoogle HomeGoogleアシスタントで実行できるアプリの開発が可能です。
また、DialogflowのIntegrationsから色々なサービスのボットを作成できます。

こんな感じ
f:id:kurusaki:20180629001915p:plain


Dialogflowを利用して簡単なチャットボットの作成手順をAtotok Labo の方にまとめました。
こちらでは、Dialogflowでチャットボットを作成し動作確認までの手順をまとめています。
シミュレータで実行する時にGoogleのアカウントの設定の影響でうまく動作しなかったりしたので解決方法なども記載しています。
atotok.co.jp



Webhookなど利用して外部サービスとの連携もできるので試したらこちらでも紹介したいと思います。



アトトックラボ