rukurxの日記

自分の日々の作業や調べたことのメモ

Pythonのrequirements.txt生成方法

pipコマンドから生成する pip freeze > requirements.txt この場合OSにインストールされているモジュールが対象になる。 プロジェクトで使っているモジュールのみを対象にしたい場合は仮想環境をアクティブにしてから実行する必要がある。 cd my_project sou…

BeanstalkでFlaskの起動サーバーにWSGIを使う

今回はWSGIの実装であるuWSGIを使う。 GunicornもあるがuWSGIの方が高機能で高速なため。 uWSGIをインストールするため、requirements.txtに追記する。 vi requirements.txt uWSGI==2.0.20 Procfileに起動コマンドを既述する。 vi Procfile web: uwsgi --htt…

BeanstalkでFlaskのAPIサーバーを構築する

プロジェクトフォルダを作成する mkdir flask-prj cd flask-prj virtualenvをインストールする pip install virtualenv 仮想環境を構築する virtualenv venv 直下に venv ディレクトリが作成される。 仮想環境に入る source virtualenv/bin/activate または …

Beanstalk の RDSにローカルから接続する。

そのままだとmysqlコマンド使えないのでec2にmysqlをインストールする yum install mysql sshポートフォワーディングする ローカルの3307ポートにRDSの3306ポートを転送する ssh -f -N -L 3307:abcdefg.ap-northeast-1.rds.amazonaws.com:3306 -i /Users/sel…

EBのヘルスチェックでルートEBS ボリュームが足りてないエラー出たので拡張した

Beanstalkのヘルスチェックで以下エラーが表示されていた。 90 % of root file system is in use. 802 MB free. どうやらルートのディスクボリュームが足りていない模様。 まずはec2にsshしてディスク容量の確認をすることに。 $ df -h Filesystem Size Used…

Google Colaboratoryでフォルダをダウンロードする

Google Colaboratoryで学習したモデルや学習に用いたデータをダウンロードするには対象のファイルを右クリックからダウンロードを選択すればできます。 しかし、フォルダの場合は右クリックのメニューにダウンロードがないので、コードセルにコマンドやコー…

DockerでローカルにFlask環境を構築する

以下作成するファイル一覧。 $ tree . ├── Dockerfile ├── app.py ├── docker-compose.yml └── requirements.txt まずDockerを使う前にローカルでFlaskの環境を構築する。 Flaskをインストールするため requirements.txt を作成する。 $ cat requirements.tx…

DockerでローカルのMySQL環境を構築する

Macのローカル環境にDockerでMySQL立てた時のメモ。 ディレクトリ構成は以下を想定。 docker-compose.yml docker - db - conf.d - my.cnf - data - initdb.d - 001_init.sql まずはdocker-compose.ymlを用意。 Volumesでローカルのディレクトリ/ファイルをコ…

Lambdaから他のLambda関数を呼び出す

Lambda使っていて、ふとLambdaから他のLambda関数って呼べないのかなと思って調べてみたらできたのでその時のメモ。 InvocationTypeで同期処理か非同期処理かの呼び出し方法を指定できる。 期処理がよければRequestResponseを指定、非同期ならEventを指定す…

DjangoのモデルでHaving句を使う

ユーザと趣味モデルを定義して、趣味が3つ以上ある既婚者を取得する例。 from django.db import models class Hobby(models.Model): """ 趣味モデル """ name = models.CharField(max_length=255, null=False, blank=False) class User(models.Model): """ …

Pythonで電話番号をハイフン区切りに変換する

電話番号をハイフン区切りにできる便利なライブラリがないか探していたところ、GoogleがGithubで公開しているlibphonenumberを見つけました! libphonenumberは国際電話番号を解析・変換・バリデーションすることができます。 github.com だがしかし!Java, …

Djangoのテンプレート内でリレーション関係の子データをソートする

リレーション組んで取得した子データの表示順がバラバラだったのでどうにかできないかと思ったらテンプレートの組み込みタグである dictsort を使って解決できました! dictsortを指定したキーで昇順にする <ul> {% for user in users %} {% for hobby in user.h</ul>…

Pythonで数字を3桁区切りカンマにする

Integer型の場合 f"{num:,d}" >>> num = 1000000 >>> print(f"{num:,d}") 1,000,000 Float型の場合 f"{num:,.2f}" >>> num = 1234.5678 >>> print(f"{num:,.2f}") 1,234.57 参考 stackoverflow.com

aliasで設定したコマンドをシェルスクリプト内で実行する

シェルスクリプトを実行したらaliasで追加したコマンドが無いよと怒られた... ./hoge.sh: 行 40: hoge: コマンドが見つかりません 普段コマンドラインで使っているコマンドだったので、???状態。 man bash で見たらインタラクティブモードじゃないとalias…

MySQLのSELECT結果をエクスポートする

MySQLからデータをエクスポートするとtsv形式になる。 オプションでCSVとかの形式も選べるのかと思っていたが、どうやらできなそう。 デフォルトのエクスポートだとtsv形式でファイルに出力される echo "SELECT * FROM user" | mysql -uroot -p > data.tsv c…

privateの静的関数をPHPUnitでテストする

PHPUnitでの private static function のテスト方法がわからなかったのでメモ。 公式のドキュメントを見るとReflectionMethod::invokeArgs に最初の引数にnullを渡してあげればよさそうなのでやってみる。 PHPUnitをインストールする $ composer require php…

GitでプッシュしたコミットのAuthorとCommitterを変更する

Git

Gitの設定でglobalにuser.nameとuser.emailを定義していると、 新しくcloneしてきたリポジトリのコミットにglobalのものが使われてしまう。 プライベートでも業務でも同じアカウント使っていれば問題ないが、別々だとPush後に慌てることになる。 自分がいつ…

PHPのFakerを使ってテストデータを自動生成する

PHPでユニットテストを書いていると、適当なテストデータが必要になる。 毎回テストとかHoge的なテストデータを使っていたので、ちゃんとしたテストデータを使いたかった。 PHPにはFakerというランダムにテストデータを生成してくれるライブラリがあるので早…

コマンドラインから使えるチートシートを試してみた

コマンドラインを使うことが多いけど、あまり頻繁に使わないコマンドやオプションはすぐに忘れてしまうので、気軽にコマンドラインから呼び出せるチートシートないかと思っていたら、忘れた頃に発見! github.com そのまんま cheat って名前だった… Macにイ…

Composer使ったのでメモ

Composerとは Composerはライブラリの依存関係を管理してくれるツールです。 ライブラリAを使おうとしたら、内部的にライブラリBやCを使っていることがあります。ライブラリAを使うために自分でBやCをインストールしたりするのは手間がかかります。 getcompo…

PHP7で追加されたスペースシップ演算子(<=>)について

PHPのコードレビューをしていたら見慣れない演算子 <=> を発見! なんやこれと思ったら、PHP7で追加された スペースシップ演算子(spaceship operator) という比較演算子でした。 スペースシップ演算子は左辺と右辺を比較した結果として、-1, 0, 1 のいずれか…

PHPをコマンドライン上で対話式に実行する

PHPの対話シェル(REPL)を使うには -a オプションを指定する。 $ php -a Interactive shell php > 通常のPHPの実行したときと同様に、計算結果の出力やクラスを定義したりできるので、ちょっとした機能の確認に使うと便利そう。 $ php -a Interactive shell p…

MacでのSSH接続を管理する

サーバーにSSH接続するたびに毎回ホスト名や鍵情報を書くのが面倒なので、任意につけたホスト名だけでログインできるようにする。 ついでに踏み台サーバーを経由した多段SSHの設定もする。 通常のSSH $ ssh root@example.com -i ~/.ssh/example.key -p 22 長…

Macで秘密鍵と公開鍵を作成する

毎回ググっていたのでメモしておく。 秘密鍵と公開鍵を作成する $ ssh-keygen -t rsa -b 4096 -C "account@example.com" 暗号化方式はRSA、 鍵長は 4096 にする。-Cオプションはコメントで、ここではメールアドレスにすることでなんの鍵かわかるようにしてい…

Macにgnu-sedをインストールする

sedを使ってファイルの先頭行に文字列を追加しようとしたら、LinuxとMacで挙動が違った。 Linuxの場合は正常に処理が完了する $ sed -i '1ihoge' test.txt $ cat test.txt hoge Macの場合はエラーになる。 $ sed -i '1ihoge' test.txt sed: 1: "test.txt": u…

ReactNativeのビルドプロセスについてメモ

React Nativeのプロジェクトをビルドするため、以下のコマンドを実行する。 $ react-native run-ios React Nativeはこのコマンドで次の2つのことをします。 NodeのWebサーバー(Metroバンドラー)をローカルに起動する。 Metroバンドラー(旧パッケージャー)が…

ReactNativeのBridgeの仕組みについてのメモ

React NativeはJavaScriptでiOSとAndroidのアプリを作成することができるネイティブアプリケーションを作成するためのフレームワークです。 React Nativeでは Bridge という仕組みを使ってJavaScriptからNativeコードに処理を渡して実行することができます。…

React Native実行環境についてメモ

React NativeはJavaScriptで書ける iOS上とローカルのMacでは実行環境が異なる(2パターンある) JavaScriptCore 実機のiOS上で実行する場合は、JavaScriptCoreが使われる JavaScriptCoreはsafariブラウザのJavaScriptエンジンでもある iOSアプリにはiOS上のメ…

React Nativeをアップグレードする

初めてReact Nativeのアップグレード作業をした時、たくさんコンフリクトしてかなり焦った。次回アップグレードをする時にどうすればいいかの手順を自分なりにまとめた。 公式ドキュメントはこちら。 facebook.github.io インストール済のreact-nativeのバー…

はてなブログ始めました

去年からしばらくMediumで技術ブログを書いていましたが、半年ほどかかなくなり気分転換も兼ねてはてなで再開しようと思いました。 基本的には自分の技術メモ程度のものをまた続けていくことになりそう。 使い勝手がよかったらMediumからお引っ越ししようか…