bookmark_borderAndroid SDK Toolsがない(Android Studio/Mac M1)

Mac M1にFlutterの開発環境を整えている最中、Androidのライセンスを許可しようとするがAndroid SDKが見つからない問題が発生して許可できない。

flutter doctor --android-licenses

を実行すると

Android sdkmanager not found.

とエラーが出る。

Android sdkmanager tool not found.の解決法

対処法を調べるとこちらのページが出てきたので参考にしながら進めるが、Android SDK Toolsという項目がない。なんでやねん。

よくよく画面を見比べると、こちらには「Android SDK Command-line Tools (latest)」という項目がある。

(写真ではStatusが「Installed」になっているが、この時点では「Not Installed」でした)

これにチェックを入れてApplyし、再度以下コマンドを実行。

flutter doctor --android-licenses

今度は上手くいった。

bookmark_borderpandasをimportすると「Could not import the lzma module」とエラーが出た時の対処(MacBook M1)

CSV操作のためpandasをインストールしインポートするが、「Could not import the lzma module」とエラーが発生し実行できない。

無事調べてみた情報で解決できたので、手順を残しておきます。

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

[Python3 / pandas] pandasをアップデートしたら、lzmaなるmoduleがimportできないというメッセージが出た

ModuleNotFoundError: No module named ’_lzma’ #27532

手順

lzmaの有効化

まずはエラー文にもあるlzmaをインストール。

brew install xz

.zprofileを編集。

vi ~/.zprofile 

.zprofileに以下を追記。

prefix=$(brew --prefix)
export LDFLAGS="-L$prefix/opt/xz/lib $LDFLAGS"
export CPPFLAGS="-I$prefix/opt/xz/include $CPPFLAGS"
export PKG_CONFIG_PATH="$prefix/opt/xz/lib/pkgconfig:$PKG_CONFIG_PATH"
# YOU CANNOT HAVE THE GNUBINS in your PATH when you run this
export PYTHON_CONFIGURE_OPTS="--enable-shared"

追記した環境変数を有効化。

source ~/.zprofile

Pythonの再インストール

再インストールの前に、インストール済みのライブラリを確認。
(Pythonを再インストールすると、インストールしていたライブラリが消えてしまったので)

pip list

現在使用しているPythonのバージョンを確認。

python --version

pyenvを使って確認したバージョンをアンインストール。
(私の場合3.9.6を使用していました)

pyenv uninstall 3.9.6

この段階でPythonのバージョンを確認すると2.7.16となっており、

pyenvを使って、先ほどアンインストールしたPythonのバージョンをインストール。

pyenv install 3.9.6

pyenvを使って、インストールしたPythonのバージョンに切り替える。

pyenv global 3.9.6

.zprofile、.zshrcの内容を反映させる。

source ~/.zproflie
source ~/.zshrc

再度Pythonのバージョンを確認し、インストールした。

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

pip list

でインストール済みのライブラリを確認しつつ、Pythonをアンインストールする前にインストールされていたライブラリの状態に戻す。

pandasをインストールする。

pip install pandas

以上の手順で、pandasをimportしたpythonファイルを実行できるはず。

bookmark_borderPythonの対話モード開始と終了

対話モードとはインタプリタ上でプログラムを入力、実行できるモード。

対話モードの開始は、コンソール(またはターミナル)上で

python

と入力。

>>>

と表示され、入力待ち状態になる。
ここでプログラムを入力するとそのまま実行出来る。

対話モードの終了は、

exit()

と入力するか、「Ctrl+D」で終了できる。

よく間違えて対話モードにしちゃうけど、終了方法なんだっけ?ってなることがあるからメモ。

bookmark_borderPythonコードチェックツール

Pythonのソースコードを自動チェックしてくれるツールはないかと探すといくつか出てきたけれど、今回はflake8というチェックツールを使用してみたのでそれについてまとめる。

今回主に参考にしたサイトはこちら。

Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ!

pythonでコーディング規約(pep8)に準拠しているかチェック方法

flake8とは、ソースコードがPythonのコード規約(PEP8)に則っているか、論理的エラーがないか、また循環複雑度を確認するツール。

pycodestyleというコード規約チェックツールと、pyflakesという論理的エラーチェックツールの機能に+αで循環複雑度チェックの機能が入っているらしい。

※pep8というツールが新しくなったものがpycodestyleらしい。(pep8自体は今も使える)

pip install flake8

でインストールして使用可能となり、

flake8 main.py

で実行可能。
(main.pyの部分には確認したいソースファイルを入れる)

実行してみるとこんな感じでエラーが出てきました。

エラー出すぎ!!

「E」や「W」から始まるエラーコードはコード規約エラーまたは警告、「F」から始まるエラーコードは論理的エラーの検知、「C」から始まるエラーコードは循環複雑度の検知らしい。

flake8 ./

のようにディレクトリを指定してやると、ディレクトリ内の.pyファイルをすべてチェックしてくれるみたい。
便利!!

その他にも

flake8 main.py --show-source

のようにオプションをつけて送ると、ソースコードの指摘箇所も表示してくれるようになるみたい。

ちなみにオプション一覧は

flake8 --help

で確認可能。

autopep8というツールを使うと自動でコード修正までしてくれるみたいだけど、最初はエラーを確認しながら自分で修正していきたいのでとりあえずは使いませんでした。
(手間に感じてきたら使うかも)

bookmark_borderNode.js環境で.envを使用

APIキーを直書きではなく環境変数で呼び出して使いたい・・・と思い、実装しました。

https://maku77.github.io/nodejs/env/dotenv.html

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

 

npmに「dotenv」というパッケージがあるらしく、こちらをまずはインストール。

npm install dotenv --save

.envファイルを作成し、環境変数を設定。

KEY1=XXXXXXXXXXX
KEY2=YYYYYYYY

最初は”XXXXXXXX”ってクォーテーションマークで囲っていたけど、不要みたい。

 

jsファイルでdotenvを参照させるため、こちらを追記。

require("dotenv").config();

あとはrequireを追記したjsファイル内で

process.env.KEY1

のように書いてやれば、設定したキーを参照できる。

 

ファイル構造はこんな感じ。

sample-app
├─app.js
└─.env

最後に、Git管理するなら.envファイルはコミットしないよう気をつける必要が。

なので.gitignoreファイルに

.env

と追記を。

bookmark_borderNode.jsのSSL化

Node.jsで立てたhttpのサーバーをhttpsで接続できるようにするため色々調べたところ、

https://kennejs.com/entry/2019/01/19/074529

このサイトを参考にすることで無事SSL化に成功した。

 

ドメインも取得していたし、SSL証明書もネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」を参考にLet’s Encryptで取得していたので、Node.jsのアプリケーションを修正だけでできた。

 

const https = require('https');
option = {
  key: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/cert.pem'),
  ca: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/chain.pem')
}

まずはこのコードを追記。私の場合「fs」をrequireしていなかったので、この上にさらに

const fs = require('fs');

を追記。

 

const server = http.createServer(app).listen(3000);
let io2 = io.listen(server);

としていたところを

const server = https.createServer(option, app).listen(3000);
let io2 = io.listen(server);

に変更。

 

これで無事にSSL化に成功。

bookmark_borderApache&Node.jsの共存

Apacheを動かしている状態だとNode.jsでサーバーを立ててもNode.js側には接続できず、ApacheをストップするとNode.js側に接続できるという状態が発生した。

どうやら共存させるために手順が必要なようだ。

 

http://note.onichannn.net/archives/2451

上のサイトを参考に、httpd.confのリッスンポートとバーチャルホストのポートを80番以外に避難することで、無事に共存させることができた。

サイト内ではNode.js側はhttp-proxyを導入しているが、この手順は行っていない。

元々ポート80番以外で接続するように設定していたからかな。

bookmark_borderPythonで月名を表示

昔Qiitaに書いていた記事をそのままこっちにも記載。

転載元:https://qiita.com/Rxxx/items/382854052b14c1764b5b

 

初めてPythonを触ったので練習として
「入力した数値に該当する数値の月名(英語3字)で表記する」
というものを作成。

 

以下、作成したコード。

#月名タプル
MONTH = ( 'Jan', 'Feb', 'Mar', 'Apr',
           'May', 'Jun', 'Jul', 'Aug',
           'Sep', 'Oct', 'Nov', 'Dec' )

#入力    
print('数値に該当する月の英語名を表記します')
num = int(input('数字を入力してください:'))

#出力判定
if 1 <= num <= 12:
    print(MONTH[num-1])   #月名出力
else:
    print("その月はありません")  #エラー

 

実行するとこんな感じ。
(入力値:2)

数値に該当する月の英語名を表記します
数字を入力してください:2
Feb

 

1~12以外の数値を入力するとこう表示される。
(入力値:14)

数値に該当する月の英語名を表記します
数字を入力してください:14
その月はありません

 

入力を数字のみに制限するのは今後の課題かな。