ケンヤ・ミサキのプログラミング日記

Ruby, Pythonなどのプログラミング日記です

Capybaraの初期設定をする

前提

Capybara初期設定の目的

前回、Chrome driverのインストールをしたので、いよいよ、Capybaraの諸設定をしていきます。これは、基本的にChrome driverで読み込んだWEBブラウザの情報をCapybaraのメソッドで操作できるようにするための設定です。

RSpecでは、WEBブラウザの可視的なコンテンツ情報(おそらくはhtmlコード)に各種のメソッドを割り当てていきます。このため、Chromeのブラウザ上のコンテンツ情報をCapybaraの変数として操作する必要があるのだと僕は理解しています。

実際は、Capybara からSelenium Webdriverを介してChromeブラウザを動かすのだと思うのですが、その設定にあたり、参考にしたサイトはこちらになります。

こちらのサイトは、基本的にrailsをインストールされている方の書かれているサイトなので、非railsにも適用可能な内容を他のサイトも参考にピックアップして設定していきました。

capybara.rbの作成

以下のコマンドを実行してCapybaraの設定をまとめて規定するcapybara.rbというファイルを作ります。

mkdir spec/support

touch spec/support/capybara.rb

capybara.rbは以下のとおりに設定

require 'selenium-webdriver'
require 'capybara/rspec'

Capybara.configure do |config|
config.default_driver = :chrome
config.javascript_driver = :chrome
config.run_server = true
config.default_selector = :css
config.default_max_wait_time = 5
config.ignore_hidden_elements = true
config.save_path = Dir.pwd
config.automatic_label_click = false
end

Capybara.register_driver :chrome do |app|
# ブラウザーを起動する
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

なお、Seleniumの"オプション設定"は今回は外しておき、コーディングが進んで障害になる場合に適宜追加することにしました。

spec_helper.rbの追加設定

spec_helper.rbの設定はこちらも参考にしました。

冒頭部に以下を記載。

require 'capybara/rspec'
require 'selenium-webdriver'
require 'support/capybara.rb'

Rspec.configureの設定に以下の1文を追記。

RSpec.configure do |config|
config.include Capybara::DSL
end

DSLとはドメイン固有言語(Domain Specific Language)の略称らしいですが、このあたりも勉強不足でおまじないがわりになってます。

一応、こちらの設定でRuby/RSpec/Capybara/Turnipが動きました。次回以降、具体的なスクリプトのコーディングに移っていきます。

Chrome driverのインストール

前提

Chrome driverのインストールコマンドなど

Capybaraの諸設定をして、Chromeを自動操作するまでの流れを書いていきます。基本的にChromeの自動操作はSelenium Webdriverを介して行われており、Seleniumのメソッド類はruby以外にも各プログラミング言語で用意されています。

今回は、 Capybaraを介してSelenium を操作することにより、Capybara専用の、RSpecに特化した便利なメソッドを使えるようにしていきます。

まず、chrome driverは、Homebrewを使ってインストールします。chrome driverのインストールはこちらを参考にしました。

qiita.com

まだ、よくわかってないのですが、いろいろとHomebrewがUpdateされ、現在はcaskを使わないといけないそうです。

brew cask install chromedriver

すると、以下のようなエラーメッセージが表示されました。

Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask

そこで、以下のコマンドを実行します。

brew install —cask chromedriver

一応、これでうまくインストールできた模様です。

うまくいかない場合

なお、後日談ですが、seleniumをうまく動かすためには、Google Chrome (ブラウザ側)のversionとchrome driverのversionを合わせないといけないそう。

この場合、必要に応じて手動でchrome driverを対象フォルダに投入します。それにあたっての留意点は以下の2点になります。

  1. chrome driverの保存先は隠しフォルダなので隠しフォルダを表示する設定にする(当然ですが)
  2. Mac OSのセキュリティ要件の関係で手動で保存されたchrome driverにはロックがかかっています。なので、システム設定>>プライバシーとセキュリティからロックを解除します。

とりあえず、しっかりChrome driverをインストールできてよかったです!笑

プログラム初学者の方へのメッセージ

 

前提

どうやったらプログラマーになれるの?

僕自身は、大学でWeb制作とJavaの講義を受けており、基礎的なITの知識はあったのですが、とはいえ、当時、HTML5以前の時代で、CSSという概念自体がなかったので、ページの装飾などもhtmlコードのみで行うなど、今とはかなり違っていました。

その後、Web制作の依頼をフリーランスで受けたこともあるのですが、結局、CSSJavaScriptHTML5の文法などは、独学で学び直した感じです。

Rubyはその後TechCampというスクールで1年をかけて勉強しました

現在、Googleがampのような規格を発表しており、5G後の本格的なVRコンテンツ制作の時代に向けて、Webブラウザの仕様も変わってくると思うのですが、結局、プログラムの仕様(文法や仕組み)というのは、通信規格(4Gや5Gのこと; 10年おきに変わっており現在は6Gが企画段階)やバイスの進化に応じて変わってくるところがあるので、プログラミング技術は、時々刻々進歩することが避けられない運命にあります。

なので、基礎知識は、学校などで一定程度勉強する必要があるのですが、あとは、時代の流れに乗り遅れないように、各自が独学で勉強をしていく、というのがプログラマーの基本じゃないかと思っています。

WordPress後のWeb制作

今現在、ウェブ上のコーポレートサイトは、ほとんどがWordPress等のCMS(Contents Management System)を利用して作られており、デザインへのこだわりがなければ、GUIのみで短期間でサイトを制作することができます

こういった状況下で、Webデザイナーに求められるスキルは、

  1. 独自性とデザイン性の高いコンテンツを作成することができるスキル
  2. Google Searchなどのサーチエンジンにヒットしやすいコンテンツを制作するスキル(SEO; Search Engine Optimization)

じゃないかと思っています。もちろん、WordPressには、SEOに強いテーマや、SEO用のpluginも用意されており、ある程度わかりやすいインターフェースでSEO対策などをすることもできるのですが、やはり、Google Search等のサーチエンジンの原理原則を抑えておくことが大事で、それが、ChatGPT後のウェブ制作にも生きてくるのではないかと思っています。

デザインについては、WordPressで言うなら、単にテーマだけではなく、写真や動画コンテンツ、将来的にはVRの普及に伴い、3Dアイコンなどの作成技術を身につけていくことが必須になってきます。

なので、特に、チームでの分業をしていかないフリーランスWebデザイナーの方は、こういった関連技術を幅広く身につけていく必要があります。

スクラム開発とリーンスタートアップ

フリーランスで仕事をするとき、新しいIT事業をスタートアップするとき、気をつけなければならないことは、一定のクオリティーの商品を出すために、必要以上の時間とコストをかけすぎないように配慮することです。

もともと、IT事業は、チームでやる、あるいは、利害関係者と調整しながらやる、というのが基本ではあるのですが、もし、開発チームがユーザーや営業担当の意見を聞かずに、完成版まで開発を進めてしまい、完成後、得られた製品が、ユーザーの求めるスペックと違うものだった、と言うことになると、それまでの開発に要した時間と費用が完全に無駄になってしまいます。

これは、スタートアップやフリーランスの人たちを大きく躓かせ、大失敗に導いてしまう原因になります。

なので、今、IT事業の分野では、スクラム開発リーンスタートアップという概念が広く採用されており、要は、「必要最低限の製品を作って顧客や営業担当の意見を聞く」というステップを、2週間程度の短期間で実施する、ということになっています。

そして、「必要最低限の製品」を、MVP(Minimum Valuable Product; 実用最低限の製品)と呼称し、開発初期段階から顧客との打ち合わせを行なって、MVPの仕様を決め、それに沿って、短い期間(Sprint)で開発を実行し、MVPの完成後に再度、顧客の意見を聞く、、というのを繰り返すのが良いと言われています。

スクラム開発(「アジャイル」とも言います)については、非常に奥が深くここには書ききれませんが、フリーランスで働くことを考えている人や起業を目指している人は、例えば、以下のようなYouTube動画を参考にすると、働き方の基本的なアイディアがわかるかもしれません(いずれも欧米発の良書の解説動画です)。

 

www.youtube.com

youtu.be

Turnipについて&Turnipの設定

前提

Turnipとは何か?

あまり情報がないので僕自身もよくわかっていないのですが、Trunipというのは、Gehrkin記法という独特の記法で記載されるプログラムのことをさしています。僕の環境では、Capybaraと一緒に使うことを前提としています。

Gehrkin記法とは、特に、スクラム開発の現場などにおいて、stakeholdersをうまく巻き込むために、自然言語に近い記法でプログラムのシナリオを記載し(featureファイル)、それを、stepファイルというRuby/Rspecで書かれたプログラムに落とし込んで、Acceptance Testを実行する、というような枠組みです。

顧客やユーザーに見せるシナリオはfeatureファイルの方で、それをサポートするようにstepファイルをコーディングしていきます。

今回、僕は、とある特許系のDBのスクレイピングを自動化する目的で、RSpecを利用するので、割と特殊な用途で使うのですが、本来の目的は、自社開発Webアプリなどの受け入れテスト(Acceptance Test)の自動化・効率化で、要は、クライアントの求めるシナリオに沿ったテストスクリプトを書いておき、それを自動で効率的に実行することです。

これを、一般に、ATDD; Acceptance Test Driven Developmentなどと呼称しています。

Turnip(英語でかぶという意味)の兄弟の中にはCucumber(きゅうり)やSpinach(ほうれん草)などもありますが、現状で、一番使われているのはTurnipのよう。

ちなみに、Gehrkinもきゅうりの一種ですが、英語圏では同じきゅうりと言っても種類によっていろんな呼び名があるみたいですね!

Ruby/RSpec(非rails)でのTurnipの設定

Turnipの設定についてのWebサイトの記載は、主にrails環境のものも多いのですが、今回は非railsでの話をしたいと思います。

参考にしたサイトはこちら

Turnipのインストール

Gemfileに

gem "turnip"

を追記して、bundle install

Turnipの設定初期化

Rspecではspec_helper.rbというファイルが作られているのですが、これとは別途、turnip_helper.rbというファイルを作らないといけません。なので、以下のコマンドを実行。

touch spec/turnip_helper.rb

このファイルを編集して、以下の記載を追加する

require 'spec_helper.rb'
Dir.glob("spec/steps/**/*step.rb"){ |f| load f, true }

Dirで始まる一文は、インストール時に参照するstepファイルのファイル名条件と保存場所を示していて、フォルダ構造に沿って記載する必要があります。上記の例であれば、specフォルダ中stepsフォルダに格納されている任意のファイル、またはその下のフォルダ中の任意のファイルで、step.rbで終わるファイルを参照せよ、という指令ですね。

.rspecファイルへの追記

.rspecファイルは隠しファイルなので、これを表示させた上で編集します。.rspecファイルに以下の一文を追記。

-r turnip/rspec

これは、Rspecコマンド実行の際の条件を規定しているみたいなのですが、あまりよくわかっておらず、単なるおまじない的な立ち位置です。

featureファイルとstepファイルを作成する

テスト用で以下のように作成します。

test.feature

Feature: Web自動化
Scenario: J-PlatPatアクセス
Given J-PlatPatにアクセスする
When クリックする
Then 出力する

 

steps/step.rb

step "J-PlatPatにアクセスする" do
puts "サイトにアクセスした"
end

step "クリックする" do
puts "クリックした"
end

step "出力する" do
puts "出力した"
end

この状態で、以下のコマンドを実行

bundle exec rspec

以下の出力が得られた。

サイトにアクセスした

クリックした

出力した

今回はputsメソッドしか使っていないので、コンソールへの出力のみですが、今後、設定を進めることにより、Webブラウザを自動操作できるようになります!

MacにRubyをインストールする!

前提

  • PC: MacBook Air(ローカル)
  • 言語: Ruby(現状は非rails// rails環境はAWS上に構築済み)
  • 目標: RSpec, Capybara, Turnipあたりの利用環境設定

Macrubyをインストールする際の事前準備

MacRuby環境をインストールするときの注意点などをまとめました!

インストールにあたり、参考にしたサイトはこちら

  • 「ユーティリティー」の「ターミナル」を利用
  • Homebrewをインストール
    • 特定環境でRubyだけが動くようにする、という理解
    • 要は、いろんなパッケージをインストールしたときに、相互の環境が混ざり合って、動作が干渉しあわないようにするためのMac専用ツール(☜違っていたら教えてください)
  • rbenvをインストール
    • 開発環境に応じたrubyのバージョン管理ツール
  • rubyの最新バージョンをインストール

rubyそのものの設定(rubyの参考書を適宜見てください)

注意!!:rubyについての基礎は、必要に応じてrubyの参考書や他のネットサイトを参照してください。基礎的なコマンドやメソッドについては、説明を省略します。なお、コマンド実行については、場合に応じ管理者権限(sudo)が必要になる場合があります!

bundlerのインストール

gem install bundler

Gemfileの生成(初期化)

bundle init

Gemfileの編集&インストール

bundle install

ruby自体の環境設定という意味では、これだけでOKです。あとは、個別にrubyでやりたいことに応じたgem(パッケージ; 特有の機能を持った小さなプログラムのセット)をインストールしていき、固有機能を追加していきます。個別のgemの紹介と、その機能説明は、後日やります。

 

【自己紹介】ケンヤ・ミサキについて

こちらのブログを書くにあたり、(IT系の経歴という意味での)自己紹介をします。

 

【学歴】旧帝国大学の理学部・生物/化学系

【年齢】40代前半

【経験のある言語】Java, Ruby & HTML, CSS, JavaScript

【今後やりたい言語】PHP, Python

【ITでの一番の得意分野】Webデザイン, SEO対策

【OS】Windows, iOS, Linux全て経験あり

【その他】法律系専門職、会計についての知識あり

 

親戚のおじさんがPCが得意で、それに刺激を受けて、大学時代からプログラミングを少しやっていました。大学時代には、Javaブロック崩しゲームを作ったりしていた経験があります。

20代の頃は、主にWebページを制作したり、デュアルブートUbuntuなどをいじったりしていました。

30代中盤頃に、1年くらいの時間をかけて、Ruby on Railsの勉強をして、SNSや会員サイトの構築のスキルを学んでいます。

本業は、40歳くらいまでずっと法律事務所勤務でしたが、最近になってプログラマーに転身しています。

異色のキャリアだと思いますが、法律や会計の話も絡めて、プログラミングで色々とやりたいことがあるので、それを実装できるように頑張ろうと思っています。

「ケンヤ・ミサキのプログラミング日記」について

こんにちは!ケンヤ・ミサキです!

名前の由来は、「転生したらスライムだった件」のキャラクターの「ケンヤ・ミサキ」くんが、僕の子供の頃の雰囲気にちょっとだけ似ているから、このニックネームを使っています!

今回、某大規模DBを自動解析するにあたり、設定の記録を残すためにブログを立ち上げました。

環境としては、以下の環境を使っていきます。

 

【プログラム言語】Ruby (非rails)

【PC環境】MacBook Air (ローカル)

【主なgem】RSpec, Capybara, Turnip, Selenium-webdriver, Nokogiri

 

【プログラム言語】Python

【開発環境】AWS Cloud 9

 

Rubyは本業で使用しておりますが、Pythonは初心者です。

--

追記(2023/10/15):RubyはLocalで動かせるようになり、作業自体は順調だったのですが、MacBook Airが不調となってしまったため、以後、AWSRubyを動かせるようにしたいと思っています。