もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

React-Nativeでカメラ起動してみた

React-Nativeで端末にアプリを落として、カメラ起動するところまでやってみました。

今回のアプリで使用したいツールは以下の

React-Native-Camera

を使用したいと思います。

参考サイト

インストール

以前上げた記事を見ながら、プロジェクトを作成します。

$ react-native init test2

その後作成したプロジェクトのディレクトリに移動して、以下を実行します。 以下のコマンドは、今回使用するReact-Native-Cameraの README に記載されている Mostly automatic install with react-native になります。

$ cd camera-test
$ npm install react-native-camera --save
$ react-native link react-native-camera

↑のコマンドを実行すると、以下のエラーが出ました。

Command `link` unrecognized. Make sure that you have run `npm install` and that you are inside a react-native project.

npm installしなさいよと。なので、実行します。

$ npm install

再度実行すると、うまくいきました。

$ react-native link react-native-camera
Scanning folders for symlinks in /path/to/test2/node_modules (20ms)
rnpm-install info Linking react-native-camera android dependency 
rnpm-install info Android module react-native-camera has been successfully linked 
rnpm-install info Linking react-native-camera ios dependency 
rnpm-install info iOS module react-native-camera has been successfully linked 

コード修正

今回はiOSで実行してみようと思います。

plistファイル修正

まずplistを修正します。

test2/ios/test2/Info.plistを開いて以下を追加します。

    <key>NSCameraUsageDescription</key>
    <string>Your message to user when the camera is accessed for the first time</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Your message to user when the photo library is accessed for the first time</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>Your message to user when the microphone is accessed for the first time</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>Your message to user when the photo library is accessed for the first time</string>

それぞれ、意味があります。

  • NSCameraUsageDescription

    カメラへのアクセス

  • NSPhotoLibraryUsageDescription

    フォトライブラリへのアクセス

  • NSMicrophoneUsageDescription

    マイクへのアクセス

  • NSPhotoLibraryAddUsageDescription

    フォトライブラリへのアクセス(こちらはiOS11以降で必要になったようです)

string部分は、端末で表示する注意文言となります。

App.jsファイル修正

test2/App.jsの中身をREADMEのサンプルコードに移し替えます。

サンプルコード

XCodeでの編集

今回iOSで確認する予定ですので、端末で確認するためにはXCodeからビルドする必要があります。

なので、test2/ios/にある、 test2.xcodeproj を開きます。

そして、ビルド先を添付画像のように、端末に設定します。

f:id:kojirooooocks:20180103020945p:plain

ビルドしてみましょう。

f:id:kojirooooocks:20180103021006p:plain

ビルド失敗しました。。。 確認してみます。

f:id:kojirooooocks:20180103021021p:plain

プロビジョニングプロファイルの指定がなかったために出てたエラーのようです。

以下を修正して対応しました。

f:id:kojirooooocks:20180103021040p:plain

エラーも消えたので再度ビルドしてみると、端末にアプリを落とすことが出来ました。

ただ、ビルドされたアプリではエラー画面が表示されていました。

f:id:kojirooooocks:20180103021055p:plain

色々と調べていたのですが、こちらのissueの内容で、解決しました。

class BadInstagramCloneApp extends Component {

の箇所を

export default class BadInstagramCloneApp extends Component<{}>

に変更しました。

再度実行してみます。

f:id:kojirooooocks:20180103021112j:plain

問題なく写真が取れて、画像を保存できました!!

たのしー!!

ただ、実際理解していくにはReact.jsの知識が必要そう。。。

なんとなくJSを使ってきた自分にとって、勉強すべき課題が見つかったいい振り返りになりました。

React-Native触ってみた

Web+Db Press vol102で紹介されていたReact-Nativeを触ってみました。

ちょうど仕事でもアプリ開発を求められる可能性が出てきているので、先に素振りしておきたいと思ったので、ちょうど良かったです。

ではスタート。

参考サイト

https://qiita.com/ponnjinnka/items/006b632a0b56369451b9

React-Native Install

以下のコマンドでインストールします。

npm install -g react-native-cli

react-nativeのコマンドが使用できるようになります。

このブログ作成時の最新バージョンはv0.51.0でした。

サンプルアプリ(雛形)を作成

以下のコマンドで作成します。

react-native init --version='バージョン' プロジェクト名

バージョンは指定しない場合、最新のバージョンが設定されるようです。

実行すると色々と表示され、インストールを頑張ってくれます。

以下が表示されれば完了です。

To run your app on iOS:
   cd /path/to/プロジェクト名
   react-native run-ios
   - or -
   Open ios/プロジェクト名.xcodeproj in Xcode
   Hit the Run button
To run your app on Android:
   cd /path/to/プロジェクト名
   Have an Android emulator running (quickest way to get started), or a device connected
   react-native run-android

iosシミュレータ起動

以下のコマンドを実行します。

cd /path/to/プロジェクト名 react-native run-ios

いろいろ頑張ってビルドしてくれてますが、シミュレータが起動するまでは早いです。

f:id:kojirooooocks:20171228012932p:plain

ビルドが終わりアプリが立ち上がると、シミュレータは以下のような表示になります。

f:id:kojirooooocks:20171228012905p:plain

Androidシミュレータ起動

以下のコマンドを実行します。

cd /path/to/プロジェクト名
react-native run-android

iosのビルド同様、頑張ってビルドしてくれます。

しかし自分の環境ではエラーが出ました。

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

ANDROID_HOMEというandroid-sdkまでのパスを格納する環境変数がセットされてないみたいです。

ということで環境変数をセットして再度実行

ANDROID_HOME=/path/to/Android/sdk react-native run-android

更に違うエラーが発生。

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:installDebug'.
> com.android.builder.testing.api.DeviceException: No connected devices!

調べたところAndroidの場合はエミュレータを先に立ち上げておく必要があるみたいです。

iosは立ち上げてくれたからandroidも勝手に立ち上げてくれると思っていた。。。

エミュレータを立ち上げた状態で、再度コマンドを叩くとビルドされたアプリがエミュレータ上に表示されました。

f:id:kojirooooocks:20171228012957p:plain

とりあえず触ってみる

App.jsがメインのプログラムのようなので、こちらを修正してみます。

Welcome to React Native となっている部分を うぇるかむ とぅ りあくと ねいてぃぶ に変えてみます。

その後シミュレータ上でCmd+Rで画面更新してみると更新されました。

f:id:kojirooooocks:20171228013021p:plain

毎回ビルドしなくていいというのは、スピード感が失われないのでうれしいですね。

さらにCmd+Rを押さずとも自動リロード出来る機能もあるようです。

シミュレータ上でCmd+Dを押して Enable Hot Reloading を選択してください。

そうすると、同じように文章を変えると、Cmd+Rを実行しなくても画面が更新されるようになりました。

React-Native面白いですね!

もうちょっと触ってみます!

ではでは。

「1日30分」を続けなさい!を読んでみた。

こんにちは。

今年から成長のためにアウトプットを増やすことを頑張っております。

というわけで今年初Postしてみます。

しかし勉強って難しいですね。。。

自分は、大学にも行ってないため受験勉強をしていません。

かつ、中学・高校は死ぬほど遊び回っていて、勉強をするという行為自体慣れてない・・・というかほぼほぼしていませんでした。

そういった危機感もあり、去年の暮に掲げた成長目標を達成させるため、まず、自分の意識的なところと、勉強方法を学ぶために、 ↓のブログ記事のスライドで紹介されていた、「1日30分」を続けなさい!を読んでみました。

kakakakakku.hatenablog.com

オーディオブックCD MP3形式 「1日30分」を続けなさい! 人生勝利の勉強法55 (<CD>)

オーディオブックCD MP3形式 「1日30分」を続けなさい! 人生勝利の勉強法55 ()

先程書いた通り、勉強はしてこなかったので、読書も苦手です。

頑張って読まなくてはと思い、読み進めていたのですが、あっという間に読み終えてしまいました。

とにかくスラスラと読める印象でした。

あと、うっ!うっ!と突き刺さる言葉が色々とでてきて、その度に、その解決方法は!?と引き寄せられる内容でした。

とにかく印象的な言葉が色々と出てきて、ドッグイヤーの数がどんどんと増えてしまったのですが、自分が印象に残った文章を3つ紹介させていただきたいと思います。



勉強する気がない人、または、する覚悟がない人は、しなくていいです。もう義務教育は終わったんでしょうし。

第一章のはじめでこの文章が出たときに、引き込まれました。

甘えが出ているところをガツン言ってくれて、気が引き締まった感じがしました。



最終的に笑ってあがるためには、逆転ホームランを狙うのではなく、シングルヒットを重ねて特典を挙げていきます。つまり、毎日コツコツ勉強を続けて、最終的に人生のゲームに勝利すればよいのです。

一発逆転を狙うのではなく、コツコツ積み重ねる事が大事。コツコツ頑張れば、勉強してこなかった自分でも目標の人物にたどり着ける!と自信を持たせてくれる一文でした。



今日1日と翌日の2日間のトータルで勉強の能率が一番あがる方法を考えることが大切なのです。

通勤時間の使い方(勉強方法)というところで紹介された文ですが、ハっとさせられました。

とにかく時間を無駄にせず勉強するということではなく、あくまで、1日のトータルの勉強時間を、効率良く集中して行うべきということを教わりました。



まぁ他にも上げればキリがないほど色々と、ためになる事が書かれていました。

継続は力なり。そして、継続を続けて習慣化させること。

これを頭に入れて、今年一年頑張っていきたいと思います!

来年に向けての時間の使い方

前回の記事でデカデカと目標は掲げましたが、人間1日24時間はどう頑張っても変えられない制限です。

この24時間をどう使って、各目標の達成をしていけばよいか考えようと思います。

まず1年間のルールとして以下は必ずやり通したいと思っています。

  1. ブログを週2記事書く

    • 記事内容はしょうもないことでも、どんどん書くスタンスで行く予定。
    • 慣れるまでは技術的なことでなくても書いていくつもり。ただし2記事のうち1記事は書評や技術的なことを書くルールにする。
  2. ダイエット(-10Kg)

    • サボらないように毎週日曜の振り返りで、体重も書いていく予定
  3. インフラ力・フロントエンド力をつける

    • この2つの目標は数値化しにくいのでどうしようか悩んでいるけど、1のブログを続けることで、総合的に去年(つまり今)よりレベルアップしていることを狙っている。特にフロントエンド。

上記3点をみると、つまり今年の大目標は 継続力 ということになります。

とりあえず今年のうちにtrelloへの基本カードの登録やiftttを使っての自動登録などをやっておきました(形から入ることが大事)

で、この3つのルールを守るための時間管理を今から考えたいと思います。

まず自分の今の現状ですが以下になります。 現状はフリーランスなので、業務委託という関わりでお仕事をしています。 自分みたいな低レベルなエンジニアでもなんとかお仕事もらえて頑張っております。

  1. A社: 週2常駐、週3リモートで業務委託(10:00 - 19:00)
  2. B社: その他完全リモートで月30時間程度業務委託(週8時間程度作業)
  3. 子供が生まれて、子育てになるべくコミットするため、独身時よりは時間が取れない

自宅勤務時と出社時で時間の使い方が変わるので、考え始めると難しいですが、以下みたいな感じになると思っています。

自宅勤務時

  • 07:30 - 08:00 起床・身支度
  • 08:00 - 10:00 朝飯・勉強
  • 10:00 - 19:00 A社勤務
  • 19:00 - 19:30 筋トレ
  • 19:30 - 22:00 ご飯・お風呂・子供のお世話
  • 22:00 - 23:30 B社勤務
  • 23:30 - 01:00 勉強
  • 01:00 - 07:30 就寝

出社時

  • 07:30 - 08:00 起床・身支度
  • 08:00 - 10:00 電車(読書とか)
  • 10:00 - 20:00 A社勤務
  • 20:00 - 22:00 電車(読書とか)
  • 22:00 - 23:30 夜飯・筋トレ・お風呂
  • 23:30 - 01:00 勉強
  • 01:00 - 07:30 就寝

書いてみたらびっちりだな・・・

とりあえずこれで行ってみようと思います。

来年は都合よく1/1から月曜日なので、そこから始めます。

1/1〜1/3は家庭的に予定詰まってますが、そこは言い訳せず突き進みたいなと思います。

子供いる方とかって、どうやって勉強時間捻出しているんでしょうか。。。 ぜひそのあたり聞いてみたいです。

また、僕は本を読むのすごく遅くて理解も遅いんですが、よく技術書など読んでる方、いい読み方など教えてくれたらうれしいです。。

ではでは。

続ける技術

今年もそろそろ終わりますね。

結局去年始めてから7記事という切ない記事数になりました。

@kakakakakku さんのブログを読んで続ける努力を実践しようと思ったのが、実際は仕事やプライベートに忙殺されてほぼほぼ続けることが出来ませんでした。

そんな自分に失望していたのですが、@kakakakakku さんの以下の記事を見て、再度やる気を出そうと思いました。

kakakakakku.hatenablog.com

インプット中にtwitterに流すとか、1Weekでの振り返りなど、実践的なテクニックも紹介されていたので、真似させてもらおうと思います。

1ヶ月1記事とかぬるいこと言ってたのがだめでしたね。

積み本も溜まってるし、読んだけどあんま頭に入っていない本などもいっぱいあるので、これを読んでアウトプットして自分のものにしたいと思います。

ということで来年の目標は以下。

  1. ブログを1週間に1記事書く(しょうもないことでも頑張って書く。)
  2. Python力つける
  3. インフラ力つける
  4. フロントエンド力(JS)つける

1を続けることで、2〜4のレベルを徐々に上げていけるようにしたいなと思います。

また、別の目標として以下も

  1. ダイエット(1年で10Kg落とす)

がんばりますので、生暖かい目で見守ってください。

AWS BeanstalkでCronを設定する際に環境変数を付け加える

3ヶ月くらいかかったあとのPostです。 まぁこんなブログ誰も見てないだろうから、いいや。 こんかいもQiitaのやき回しです。 Qiitaに書いてブログにも書いてってめんどくさいので、、、


Beanstalkで各環境を管理していて、環境変数 PARAM1 で環境名を送って切り分けてます。

  • テスト環境 => dev
  • ステージング環境 => stg
  • 本番環境 => prod

送られた環境変数をFWのbootstrap的な箇所で受けとって、環境別の設定を読み込んでいます。

現状、cronも .ebextensions でcronの設定を記載していたのですが、環境変数を渡さないとFWが環境を判断できずどうしようとなっていました。

諸々調べて結果、以下みたいにすれば環境取れるようになりました。(簡単だった)

container_commands:
  01_cron:
    command: "echo \"00 04 * * * PARAM1=$PARAM1 /usr/bin/php /var/www/html/fw/bin/command batch01\" > /var/spool/cron/batch"
  02_cron:
    command: "echo \"30 04 * * * PARAM1=$PARAM1 /usr/bin/php /var/www/html/fw/bin/command batch02\" >> /var/spool/cron/batch"

こんなやり方のほうがいいよみたいなのあれば、ぜひ教えてください。

laradockで簡単Laravel開発環境構築

※ Qiitaに登録していたものとおんなじ内容だったので、Qiitaのほうは削除しちゃいました。

今回はlaradockでLaravel環境を構築してみます。

homesteadは以前使っていたのですが、laradockなんてのがあったのを最近知りました。

せっかくなんで試してみます。

開発環境

OS X Yosemite 10.10.5

事前準備

必要なもの

作業用ディレクトリ作成

$ mkdir sample-project
$ cd sample-project

laravelのダウンロード

$ composer create-project laravel/laravel project

構築

公式のとおりに作ってみます。

1. laradockダウンロード

$ git clone https://github.com/Laradock/laradock.git
$ cd laradock

2. dotenvファイル作成

$ cp env-example .env

設定を変更したい場合は作成した .env ファイルを修正しましょう。

今回はアプリケーションパスと、MySQL・Nginxの設定を変更するようにしてみます。

アプリケーションパスの変更

### Application Path
# Point to your application code, will be available at `/var/www`.

APPLICATION=../project

MySQLの設定変更

### MYSQL ##############################################################################################################

MYSQL_VERSION=5.7
MYSQL_DATABASE=sample_database
MYSQL_USER=sample_user
MYSQL_PASSWORD=sample_password_12345

Nginxの設定変更

NGINX_HOST_HTTP_PORT=8888

ローカルで確認したい場合は↑の情報を変えないと接続確認できません。

3. docker-compose実行

では、公式に書いてある nginx mysql redis beanstalkd を起動してみます。

ついでに確認のため phpmyadminも起動しておきます。

$ docker-compose up -d nginx mysql redis beanstalkd phpmyadmin

↑を実行すると、パラパラとダウンロードしてビルドしてと頑張ってやってくれます。

終了したら、きちんと起動しているか確認してみましょう。

$ docker-compose ps
         Name                        Command               State                      Ports                    
--------------------------------------------------------------------------------------------------------------
laradock_applications_1   /true                            Exit 0                                              
laradock_beanstalkd_1     /usr/bin/beanstalkd              Up       0.0.0.0:11300->11300/tcp                   
laradock_mysql_1          docker-entrypoint.sh mysqld      Up       0.0.0.0:3306->3306/tcp                     
laradock_nginx_1          nginx                            Up       0.0.0.0:443->443/tcp, 0.0.0.0:8888->80/tcp 
laradock_php-fpm_1        docker-php-entrypoint php-fpm    Up       9000/tcp                                   
laradock_phpmyadmin_1     /run.sh phpmyadmin               Up       0.0.0.0:8080->80/tcp                       
laradock_redis_1          docker-entrypoint.sh redis ...   Up       0.0.0.0:6379->6379/tcp                     
laradock_workspace_1      /sbin/my_init                    Up       0.0.0.0:2222->22/tcp                    

無事起動してますね。

4. laravel側の設定

dotenvファイルの修正

接続を確立するため、MySQL、Redis、Beanstalkdの設定をlaradockで設定したものに合わせましょう。

DB_HOST=laradock_mysql_1
DB_DATABASE=sample_database
DB_USERNAME=sample_user
DB_PASSWORD= sample_password_12345

REDIS_HOST=laradock_redis_1

QUEUE_DRIVER=beanstalkd
QUEUE_HOST=laradock_beanstalkd_1

接続確認

nginx確認

http://localhost:8888にアクセスしてみましょう。

f:id:kojirooooocks:20170727164624p:plain

問題なくアクセスできてます。

Mysql確認

接続設定が正しければmigrateコマンドを実行して、successfully になるはずです。

$ docker exec -it laradock_workspace_1 php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table

早速phpmyadminで確認してみます。

f:id:kojirooooocks:20170727164636p:plain

migrationで実行されたテーブルが作成されています。

Redis確認

phpmyadmin的な便利なものはlaradockにはないようなので、泥臭く確認してみます。

laravel公式を参考にしながらやっていきます。

1. predisをインストール

$ docker exec -it laradock_workspace_1 composer require predis/predis

2. config/database.php を修正

redis の項目に以下を追記します。

'client' => 'predis',

3. app/Http/routes.php を修正

以下を追加します。

// Setテスト 
Route::get('/redis_test/set', function() {
    $result = Illuminate\Support\Facades\Redis::set("test", "redisの接続テストです。");
    dd($result);
});

// Getテスト
Route::get('/redis_test/get', function() {
    $result = Illuminate\Support\Facades\Redis::get("test");
    dd($result);
});

4. Setできるかのテスト

http://localhost:8888/redis_test/set に接続します。

接続が問題なければ以下のような表示になります。

f:id:kojirooooocks:20170727164728p:plain

5. Getできるかのテスト

http://localhost:8888/redis_test/get に接続します。

接続が問題なければ以下のような表示になります。

f:id:kojirooooocks:20170727164735p:plain

単純なSet/Getですが、問題なくできることを確認できました。

Beanstalkd確認

こちらもRedis同様、公式ドキュメントを見ながら泥臭く確認してみます。

1. 依存パッケージのインストール

$ docker exec -it laradock_workspace_1 composer require pda/pheanstalk

2. config/queue.phpを修正

connections => beanstalkd => host の値を以下に修正します。

'host' => env('QUEUE_HOST', 'localhost'),

3. Jobクラスを作成

$ docker exec -it laradock_workspace_1 php artisan make:job Test

4. app/Http/routes.php を修正

以下を追加します。

// QueueSetテスト
Route::get('/queue_test/set', function() {
    $result = dispatch(new App\Jobs\Test());
    dd($result);
});

5. listen状態にして監視

以下のコマンドでqueue監視状態にしておく

$ docker exec -it laradock_workspace_1 php artisan queue:listen

6. ブラウザで接続

http://localhost:8888/queue_test/set に接続します。

接続が問題なければ以下のような表示になります。

f:id:kojirooooocks:20170727164739p:plain

監視しているターミナル上にも以下のような表示が現れていると思います。

$ docker exec -it laradock_workspace_1 php artisan queue:listen
[2017-07-27 16:29:34] Processed: App\Jobs\Test

これですべての確認ができました。

やってみた感想

homesteadと同じく、簡単に開発環境を構築することが出来ました。

predisやpheanstalkなど使用するコンテナで依存しているパッケージも一緒にインストールできれば嬉しいですね。

というか僕がやり方知らないだけかもしれないので、もし知っていれば教えてください。

という、Qiita投稿まんまコピーで終わらせました。

次の投稿はなんとか8月中にやってみたいとおもいます。

期待している人はいないだろうけど、期待しないで待っててください。