- 投稿日:2020-05-20T21:50:50+09:00
【Mac】pip install のエラーの解決策 【Python】
pythonエンジニアで初心者の自分が困ってて解決したことをシェアします。
pip install のエラー
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/などのエラーが出た時の対処法
根本的な原因が全く分からないので、とりあえずエラー文章やsslとは、など初めて見る単語を調べてました。解決策自体はいろいろあるみたいです。
-環境-
macOS 10.14.6
python 3.6.6
venv(仮想環境)原因
おそらくpip/pythonが古いopenssl(1.0.2s)を参照しているのではありませんか? 情報を見る限り、質問者の方のopensslは最新版になっているので参照エラーが起きているように思います
下記でsslが使えるかチェックします。
pyimport sslTraceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/[username]/.pyenv/versions/3.7.0/lib/python3.7/ssl.py", line 98, in <module> import _ssl # if we can't import it, let the error propagate ImportError: dlopen(/Users/[username]/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib Referenced from: /Users/LO/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so Reason: image not foundエラーが出たので
結論
sh$ brew switch openssl 1.0.2spip install でSSL関連のエラーが出たらこれを読め!!!
これだけです。
sslが切り替わってなかったんですね。
解決してみると原因はシンプルで分かりやすかったです。
自分なりに解釈してるところが、あるかもしれませんが助けになれば幸いです。
- 投稿日:2020-05-20T21:50:50+09:00
pip install のエラーの解決策 【Python】【Mac】
pythonエンジニアで初心者の自分が困ってて解決したことをシェアします。
pip install のエラー
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/などのエラーが出た時の対処法
根本的な原因が全く分からないので、とりあえずエラー文章やsslとは、など初めて見る単語を調べてました。解決策自体はいろいろあるみたいです。
-環境-
macOS 10.14.6
python 3.6.6
venv(仮想環境)原因
おそらくpip/pythonが古いopenssl(1.0.2s)を参照しているのではありませんか? 情報を見る限り、質問者の方のopensslは最新版になっているので参照エラーが起きているように思います
下記でsslが使えるかチェックします。
pyimport sslTraceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/[username]/.pyenv/versions/3.7.0/lib/python3.7/ssl.py", line 98, in <module> import _ssl # if we can't import it, let the error propagate ImportError: dlopen(/Users/[username]/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib Referenced from: /Users/LO/.pyenv/versions/3.7.0/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so Reason: image not foundエラーが出たので
結論
sh$ brew switch openssl 1.0.2spip install でSSL関連のエラーが出たらこれを読め!!!
これだけです。
sslが切り替わってなかったんですね。
解決してみると原因はシンプルで分かりやすかったです。
自分なりに解釈してるところが、あるかもしれませんが助けになれば幸いです。
- 投稿日:2020-05-20T21:00:48+09:00
Touch Barにタスク管理ツールのタスクを自動表示させる【PHP×GoogleCalendarAPI】
最近MacBookAir13インチを卒業し、MacBookPro16インチを購入したのですが、こいつはすごいですね。
TouchBarとかいう近未来的なディスプレイ(
壮大なおもちゃ
)がついています。ここにスクリプトを書いて何か面白いことしたい(有効活用したい)と誰しも一度は思うのではないでしょうか。
私はこの記事以前に
「YouTubeの登録者数と再生数を表示させたい!」
と以前考え実装したのですが、これだけでは満足できず、今度は
今現在時刻のタスクを表示させたい!!
と考えました。本記事のゴール
タスク管理ツールに予定を入れたら、あとはTouchBarに自動で現在時刻のタスクが出てくる
完成像
こんな感じになりました。
高度な生産性はシングルタスクができるかにかかっています。
マルチタスクになって何も為せない日々が続いていませんか?
タスクを1つだけ表示させることで、目の前の作業に集中できるのです。
仕様紹介
今回タスク管理ツールには、APIが充実している
Googleカレンダー
を採用しました。基本的な流れ
- まずはGoogleカレンダーにタスク登録
- 次にGoogleCalendarAPIに登録し、PHPでイベント取得
- Better Touch Toolでphpコマンドで発火
という手順を踏みます。
前提条件、環境
OS:macOS Catalina
バージョン:PHP 7.3.12
Composer1.9.0
Better Touch Tool導入済①下準備
まずはGoogleCalendarAPI及びサービスアカウントとの紐付け、権限周りを以下の記事で行ってください。
ついでにまだカレンダーで予定作ってない方は予定を組んでおいてください。
②Composerで必要なものをインストール
A PHP client library for accessing Google APIs
https://github.com/googleapis/google-api-php-clientgithubより.zip形式でダウンロードしインストールもできますが、今回はcomposerでインストールします。
composerない方はgithubよりダウンロードもOKですが、composer便利なのでこの機会に導入しましょう。cdコマンドで作業ディレクトリに移動したのちに(今回はcalendarディレクトリとしました。どこに作成してもいいです。)
composerコマンドを実行します。$ composer require google/apiclient:^2.0いろいろなファイルが作成され以下のようなディレクトリになります。
calendar/
├ comoser.json(composerで自動作成される)
├ composer.lock(自動作成)
├ Googleサービスアカウント秘密鍵.json(下準備時にDLしてるはず)
├ vendor/
│ └ outoload.php他(自動作成)
└ calendar.php(今回の処理書く作業ファイル、まだ空でいい)サービスアカウント作成時にできた秘密鍵のjsonをここに移動させ、calendar.phpは空でいいので作成しておいてください。
③PHPでデータ取得、表示
先ほど作成したcalendar.phpに記述します。
<?php // composerでインストールしたライブラリを読み込む require_once __DIR__ . '/vendor/autoload.php'; // サービスアカウント作成時にダウンロードしたjsonファイル $aimJsonPath = __DIR__ . '/あなたの秘密鍵.json'; // サービスオブジェクトを作成 $client = new Google_Client(); // アプリケーション名 $client->setApplicationName('Touch Bar Display ToDos'); // 予定を取得するだけなので、Google_Service_Calendar::CALENDAR_READONLY $client->setScopes(Google_Service_Calendar::CALENDAR_READONLY); // ユーザーアカウントのjsonを指定 $client->setAuthConfig($aimJsonPath); // サービスオブジェクトの用意 $service = new Google_Service_Calendar($client); // カレンダーIDは後述 $calendarId = 'xxxxxxxxxxxxxxxxx'; // 開始日時 $start = date('c'); // 終了日時(1分後) $end = date('c', strtotime("+1 minute")); // 取得時の詳細設定 $startから1分後を$endとすることで、取得範囲を現在時刻のようにしている $option = [ 'timeMin' => $start, 'timeMax' => $end, 'singleEvents' => 'true' ]; // データの取得 $response = $service->events->listEvents($calendarId, $option); $events = $response->getItems(); $results = []; if (!empty($events)) { foreach ($events as $event) { $start = new DateTime($event->start->dateTime); $end = new DateTime($event->end->dateTime); $results = [ 'start' => $start->format('H:i'), 'end' => $end->format('H:i'), 'title' => (string) $event->summary ]; } echo $results['start'] . "〜"; echo $results['end'] . "\n"; echo $results['title']; } else { //カレンダーにタスクがない場合のメッセージ。自由に改変してください。 echo 'no task'; }optionはリファレンス参照してみてください。
カレンダーIDはどこから?
カレンダー左の「設定と共有」から
「カレンダーの統合」を見つければIDがわかります。
Better Touch Toolはechoしたものをretutnして表示できる
最後に取得した値を
echo
しているのは、Better Touch Toolが取得できるようにするためです。④Better Touch Toolから発火させる
まずはBetter Touch Toolを開き、以下の画面のように追加します。
ここからphpファイルを実行していきます。
手順としては
①cdコマンドでphp実行ファイルが入っているディレクトリまで移動して、
②phpコマンドを叩きphpファイルを実行するでいけます。
デスクトップにディレクトリを作られられた方はこんなコードになるかなと(
return do shell scriptは必ず必要になります
)return do shell script "cd /Users/ここは人によって違う名前/Desktop/calendar/ ; php calendar.php"その後
スクリプトを実行
を押し、画像のようにスクリプト結果
にタスクが出力されたら、完了になります。同時に
各スクリプトの実行タイミング
がデフォルトでは5seconds
となっており、これではすぐにAPIアクセス制限がかかるので、300secondsあたりに変更しておきます(ただ数分タスク更新がズレるので値はお好みで)これにてtouch Barに表示されているはずです。
このままだと文字サイズが大きいのでptをいじり調整。
表示できたら、脱マルチタスクへの第一歩だ
タスクがない場合はelse部分のメッセージが表示されます。
- 投稿日:2020-05-20T21:00:48+09:00
MacBookのTouch BarにGoogleカレンダーの現在時間のタスクを表示させる【GoogleCalendarAPI】
最近MacBookAir13インチを卒業し、MacBookPro16インチを購入したのですが、こいつはすごいですね。
TouchBarとかいう近未来的なディスプレイ(
壮大なおもちゃ
)がついています。ここにスクリプトを書いて何か面白いことしたい(有効活用したい)と誰しも一度は思うのではないでしょうか。
私はこの記事以前に
「YouTubeの登録者数と再生数を表示させたい!」
と以前考え実装したのですが、これだけでは満足できず、今度は
今現在時刻のタスクを表示させたい!!
と考えました。ごく自然な欲求かと思います。本記事のゴール
タスク管理ツールに予定を入れたら、あとはTouchBarに自動で現在時刻のタスクが出てくる
完成像
こんな感じになりました。
高度な生産性はシングルタスクができるかにかかっています。
マルチタスクになって何も為せない日々が続いていませんか?
タスクを1つだけ表示させることで、目の前の作業に集中できるのです。
仕様紹介
今回タスク管理ツールには、APIが充実している
Googleカレンダー
を採用しました。基本的な流れ
- まずはGoogleカレンダーにタスク登録
- 次にGoogleCalendarAPIに登録し、PHPでイベント取得
- Better Touch Toolでphpコマンドで発火
という手順を踏みます。
前提条件、環境
OS:macOS Catalina
バージョン:PHP 7.3.12
Composer1.9.0
Better Touch Tool導入済①下準備
まずはGoogleCalendarAPI及びサービスアカウントとの紐付け、権限周りを以下の記事で行ってください。
ついでにまだカレンダーで予定作ってない方は予定を組んでおいてください。
②Composerで必要なものをインストール
A PHP client library for accessing Google APIs
https://github.com/googleapis/google-api-php-clientgithubより.zip形式でダウンロードしインストールもできますが、今回はcomposerでインストールします。
composerない方はgithubよりダウンロードもOKですが、composer便利なのでこの機会に導入しましょう。cdコマンドで作業ディレクトリに移動したのちに(今回はcalendarディレクトリとしました。どこに作成してもいいです。)
$ composer require google/apiclient:^2.0いろいろなファイルが作成され以下のようなディレクトリになります。
calendar/
├ comoser.json(composerで自動作成される)
├ composer.lock(自動作成)
├ Googleサービスアカウント秘密鍵.json(下準備時にDLしてるはず)
├ vendor/
│ └ outoload.php他(自動作成)
└ calemdar.php(今回の処理書く作業ファイル、まだ空でいい)サービスアカウント作成時にできた秘密鍵のjsonをここに移動させ、calendar.phpは空でいいので作成しておいてください。
③PHPでデータ取得、表示
先ほど作成したcalendar.phpに記述します。
<?php // composerでインストールしたライブラリを読み込む require_once __DIR__ . '/vendor/autoload.php'; // サービスアカウント作成時にダウンロードしたjsonファイル $aimJsonPath = __DIR__ . '/あなたの秘密鍵.json'; // サービスオブジェクトを作成 $client = new Google_Client(); // アプリケーション名 $client->setApplicationName('Touch Bar Display ToDos'); // 予定を取得するだけなので、Google_Service_Calendar::CALENDAR_READONLY $client->setScopes(Google_Service_Calendar::CALENDAR_READONLY); // ユーザーアカウントのjsonを指定 $client->setAuthConfig($aimJsonPath); // サービスオブジェクトの用意 $service = new Google_Service_Calendar($client); // カレンダーIDは後述 $calendarId = 'xxxxxxxxxxxxxxxxx'; // 開始日時 $start = date('c'); // 終了日時(1分後) $end = date('c', strtotime("+1 minute")); // 取得時の詳細設定 $startから1分後を$endとすることで、取得範囲を現在時刻のようにしている $option = [ 'timeMin' => $start, 'timeMax' => $end, 'singleEvents' => 'true' ]; // データの取得 $response = $service->events->listEvents($calendarId, $option); $events = $response->getItems(); $results = []; if (!empty($events)) { foreach ($events as $event) { $start = new DateTime($event->start->dateTime); $end = new DateTime($event->end->dateTime); $results = [ 'start' => $start->format('H:i'), 'end' => $end->format('H:i'), 'title' => (string) $event->summary ]; } } echo $results['start'] . "〜"; echo $results['end'] . "\n"; echo $results['title'];;optionはリファレンス参照してみてください。
カレンダーIDはどこから?
カレンダー左の「設定と共有」から
「カレンダーの統合」を見つければIDがわかります。
Better Touch Toolはechoしたものをretutnして表示できる
最後に取得した値を
echo
しているのは、Better Touch Toolが取得できるようにするためです。④Better Touch Toolから発火させる
まずはBetter Touch Toolを開き、以下の画面のように追加します。
ここからphpファイルを実行していきます。
手順としては
①cdコマンドでphp実行ファイルが入っているディレクトリまで移動して、
②phpコマンドを叩きphpファイルを実行するでいけます。
デスクトップにディレクトリを作られられた方はこんなコードになるかなと(
return do shell scriptは必ず必要になります
)return do shell script "cd /Users/ここは人によって違う名前/Desktop/calendar/ ; php calendar.php"その後
スクリプトを実行
を押し、画像のようにスクリプト結果
にタスクが出力されたら、完了になります。同時に
各スクリプトの実行タイミング
がデフォルトでは5seconds
となっており、これではすぐにAPIアクセス制限がかかるので、300secondsあたりに変更しておきます(ただ数分タスク更新がズレるので値はお好みで)これにてtouch Barに表示されているはずです。
このままだと文字サイズが大きいのでptをいじり調整。
表示できたら、脱マルチタスクへの第一歩だ
- 投稿日:2020-05-20T18:23:41+09:00
Web会議ミュートショートカットキー問題を解消
この記事はMac OS X向けです.
Web会議ショートカットキー問題
ウェブ会議で,音声のミュートやビデオのオンオフを切り替えたいとき,いちいちマウスを持って画面上のアイコンをクリックしていたら,会話が途切れ途切れになってしまいます.
そこで,迅速に切り替えるためにショートカットキーで切り替える事を考えます.ただ,ここでWeb会議アプリショートカットキー問題にぶち当たります.
例えば,MS TeamsとZoomでは以下のようにミュート・ビデオオンオフのショートカットキーが異なります.
- ミュート切り替え
- Teams: Command + Shift + M
- Zoom: Command + Shift + A
- ビデオ切り替え
- Teams: Command + Shift + O
- Zoom: Command + Shift + V
いちいち憶えてられません.ホントクソです.
解決策
Teamsでも,Zoomでも,同じ直ぐに押せる簡単な方法でミュート・ビデオのオンオフを切り替えれるようにします.
具体的には,以下の2つを実現します.
- ミュートオンオフ切り替え: 右シフト2回押し
- ビデオオンオフ切り替え: 左シフト2回押し
Hammerspoonを使って実現
Hammerspoonのインストール方法は割愛します.
まず,少し長いコードになるので,
init.lua
を直接編集せず,ファイルを分けるために,以下を追記.~/.hammerspoon/init.lualocal mute = require('mute')以下の様な
mute.lua
を作成.~/.hammerspoon/mute.lua-- 右shift2回押しでミュートの解除・左shift 2回押しでビデオのオンオフ切り替え -- firstShift = false secondShift = false local function cancelShift() firstShift = false secondShift = false end local function toggleMuteVideoZoom(event) local c = event:getKeyCode() local f = event:getFlags() if event:getType() == hs.eventtap.event.types.flagsChanged then if f['shift'] then if c == 60 then -- 右シフト 60 if firstShift then secondShift = true end firstShift = true hs.timer.doAfter(0.5, function() cancelShift() end) if firstShift and secondShift then cancelShift() hs.eventtap.keyStroke({"cmd", "shift"}, "A") end elseif c == 56 then -- 左シフト 56 if firstShift then secondShift = true end firstShift = true hs.timer.doAfter(0.5, function() cancelShift() end) if firstShift and secondShift then cancelShift() hs.eventtap.keyStroke({"cmd", "shift"}, "V") end else cancelShift() end end end end toggleMuteVideoZoomEvent = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, toggleMuteVideoZoom) local function toggleMuteVideoTeams(event) local c = event:getKeyCode() local f = event:getFlags() if event:getType() == hs.eventtap.event.types.flagsChanged then if f['shift'] then if c == 60 then -- 右シフト 60 if firstShift then secondShift = true end firstShift = true hs.timer.doAfter(0.5, function() cancelShift() end) if firstShift and secondShift then cancelShift() hs.eventtap.keyStroke({"cmd", "shift"}, "M") end elseif c == 56 then -- 左シフト 56 if firstShift then secondShift = true end firstShift = true hs.timer.doAfter(0.5, function() cancelShift() end) if firstShift and secondShift then cancelShift() hs.eventtap.keyStroke({"cmd", "shift"}, "O") end else cancelShift() end end end end toggleMuteVideoTeamsEvent = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, toggleMuteVideoTeams) hs.window.filter.new('zoom.us') :subscribe(hs.window.filter.windowFocused, function() toggleMuteVideoZoomEvent:start() end) :subscribe(hs.window.filter.windowUnfocused, function() toggleMuteVideoZoomEvent:stop() end) hs.window.filter.new('Microsoft Teams') :subscribe(hs.window.filter.windowFocused, function() toggleMuteVideoTeamsEvent:start() end) :subscribe(hs.window.filter.windowUnfocused, function() toggleMuteVideoTeamsEvent:stop() end)参考にしたページ
- https://mac-ra.com/alt-alt-terminal/
- 2回押しで何かを実行する方法について参照しました.
- https://qiita.com/baba163/items/e2390c4529ec0448151d
- Macのキーコードについて参照しました.
- https://qiita.com/yohm/items/ed2bbc8f7c4340a55695
- 特定のアプリでのみ関数を有効にする方法について参考にしました.
- 投稿日:2020-05-20T15:36:21+09:00
PHP初心者がMacでLaravelに挑む
(試験的に勉強兼ねて英語で書いてみた)
Goal
- To learn from the environment setup to the fundamental usage
- To create a To-do app with Laravel
Environment setup
0. Development environment
Mac OS Catalina 10.15.4
MacBook Air (13-inch, Mid 2013)1. Downloading & Installing
1.1. Choosing the version
Laravel 7 (the latest version as of May 2020)
PHP 7.3.11 (Laravel 7 requires above 7.2.5)1.2. Installing composer
Access the above website and click
Download
Execute these four lines on this webpage like:
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" $ php composer-setup.php $ php -r "unlink('composer-setup.php');"They mean that in order:
・ Download the installer to the current directory ・ Verify the installer SHA-384 ・ Run the installer ・ Remove the installerMove Composer
$ mv composer.phar /usr/local/bin/composerCheck if it succeeded
$ composer -V Composer version 1.10.6 2020-05-06 10:28:101.3. Installing Laravel
Create a project called
sample
, or what else you like.$ composer create-project --prefer-dist laravel/laravel sample1.4. Starting a server
Move into the directory you made and start a server.
$ cd sample $ php artisan serveTry to access your local server:
http://localhost:8000
on a web browser!
Congratulations!!
Creating a ToDo app
Now I start to create a ToDo app known as that is simple and easy to develop for even a beginner.
I referred to this website:
Laravelの知識ゼロから基本をマスターするチュートリアル | Awesome BlogReferences
- 投稿日:2020-05-20T01:30:24+09:00
Mac mini 2007 にOSを入れなおす
目標
- Mac mini 2007 にUbuntuを入れたい
状況整理
- Mac mini 2007
- Boot Camp で windows7 が入っている
- 通常起動時は windows7 で起動する
- いろいろやってみたが現状ではMacOSXには戻れなさそう
段取り
- まずは(Windowsを消し去り)MacOSXを入れる(クリーンインストール)
- MacOSXが入った状態でUbuntuをクリーンインストール
用意するもの
- Macに付属しているMacOSXのインストールディスク
- Ubuntuバージョン16.04 LTS 32bit版を焼いたDVD1
- 有線のキーボードとマウス
やったこと
- [失敗]MacOSXのインストールディスクを入れ
alt(option)キー
やC
を押して起動- ↑からディスクを認識しなかったことが判明
- PRAMリセットを実行
- 再起動する
- 起動音をしたあたりで
option
+command
+P
+R
を長押しする- 2回目の起動音がしたら↑のキーを離す
- リベンジ:MacOSXのインストールディスクを入れ
alt(option)キー
やC
を押して起動 2- インストール手順に沿ってインストールする3
- 自分の場合はパーティションがWindowsに全振りしていたのでMacに全振りし直す
- MacMiniにrEFItをインストールする 4
- 公式サイトから
rEFIt 0.14 (6.5M Mac disk image)
を落としてきてインストールする- 用意したUbuntuのインストールディスクを入れ
alt(option)キー
を押して起動- インストール手順に沿ってインストールする
- 喜ぶ
雑記
- ここのインストールするまでに約4日かかったため記事に起こした
- 特異な状況からのインストールだが誰かの参考になることを祈る
- 記憶を辿りにやったので多少違う部分もあるかもなので試した人はコメントくれると嬉しいです
- 終わりだよ~(●・▽・●)
- 投稿日:2020-05-20T00:06:10+09:00
Macで google test をお試し利用する
目的
Macで google test をお試し利用した際の備忘録です。
環境
$ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G4015準備
cmakeのインストール
brew install cmakegoogletestをクローン
git clone https://github.com/google/googletest.gitビルド用ディレクトリを作成して移動
mkdir build cd buildcmakeを実行
ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc ln -s /usr/local/bin/g++-9 /usr/local/bin/g++ cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ .. # Macの場合はgcc,g++パス指定が必要makeを実行
make ... [100%] Built target gtest_mainmock,gtest,libをパスへコピー
sudo cp -r ../googlemock/include/gmock /usr/local/include/. sudo cp -r ../googletest/include/gtest /usr/local/include/. sudo cp lib/*.a /usr/local/lib/テスト実行
test.cpp#include <gtest/gtest.h> TEST(TestCaseName, TestName){ EXPECT_EQ(1, 1); }コンパイル
g++ test.cpp -pthread -lgtest_main -lgtest実行ファイル(a.out)を実行
$ ./a.out Running main() from /Users/seigo/Desktop/python/gtest/googletest/googletest/src/gtest_main.cc [==========] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from TestCaseName [ RUN ] TestCaseName.TestName [ OK ] TestCaseName.TestName (0 ms) [----------] 1 test from TestCaseName (0 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test suite ran. (1 ms total) [ PASSED ] 1 test.テスト結果を出力する際は、実行時に --gtest_output を付与する。
$ ./a.out --gtest_output=xml:./result.xmlresult.xml<?xml version="1.0" encoding="UTF-8"?> <testsuites tests="1" failures="0" disabled="0" errors="0" time="0.001" timestamp="2020-05-19T23:56:22" name="AllTests"> <testsuite name="TestCaseName" tests="1" failures="0" disabled="0" errors="0" time="0" timestamp="2020-05-19T23:56:22"> <testcase name="TestName" status="run" result="completed" time="0" timestamp="2020-05-19T23:56:22" classname="TestCaseName" /> </testsuite> </testsuites>json形式も指定可能
$ ./a.out --gtest_output=json:./result.jsonresult.json{ "tests": 1, "failures": 0, "disabled": 0, "errors": 0, "timestamp": "2020-05-19T23:58:37Z", "time": "0s", "name": "AllTests", "testsuites": [ { "name": "TestCaseName", "tests": 1, "failures": 0, "disabled": 0, "errors": 0, "timestamp": "2020-05-19T23:58:37Z", "time": "0s", "testsuite": [ { "name": "TestName", "status": "RUN", "result": "COMPLETED", "timestamp": "2020-05-19T23:58:37Z", "time": "0s", "classname": "TestCaseName" } ] } ] }gtest-port.h:1814:40: error: 'override' keyword is a C++11 extension [-Werror,-Wc++11-extensions]
以下の記事を見つけて解決
(続) Google Testを導入してみた
Google TestはC++11をベースに実装されている様です。故に、macOSデフォルトのgccやg++(試した環境ではVer4.2)ではビルドエラーが発生し、ビルドすることが出来ません。(∵ C++11で導入された新しい構文等に対応していないため)gcc,g++のバージョンを更新する
$ brew install gcc $ ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc $ ln -s /usr/local/bin/g++-9 /usr/local/bin/g++ ~/.bash_profileに以下を記載し、有効化します。 $ echo "export PATH=$PATH:/usr/local/bin" >> ~/.bash_profile $ . ~/.bash_profileMacOSの場合は、cmake時にgcc/g++パスを指定する必要がある
cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ ..cmake実行後、makeするとエラーが解決できていた。
参考
googletest
Google Testを導入してみた
Google Testの使い方
(続) Google Testを導入してみた
Jenkinsでgoogle testの結果表示
Using gtest in jenkins