ろきメモ【ROKI MEMO】- ろきsanの備忘録 -

ろきさんの備忘録。プログラミング学習記録や開発記録、および学んだ知識等のアウトプットとシェアを目的に書いています。たまに普通のことも書きます。

【Git タグ付け】タグを付けたり、確認したりする方法

Githubで管理している中、あるコミットに対して、タグを付ける方法。
それをリモートリポジトリに反映する、またそれを確認する方法。など。

忘れちゃうので、ここに備忘録として残す。

# タグをコメント付きで作成
$ git tag -a v0.2.0 -m "message"

# タグ確認
$ git tag

# タグ詳細確認
$ git show v0.0.0

# リモートにPUSH
$ git push origin v0.0.0

# タグ削除
$ git tag -d v0.0.0

# タグ名変更
$ git tag newTag oldTag

【git reflog / git reset】ファイルを消してしまった場合に、過去のコミットの状態に戻す方法

ファイルを消してしまった場合に、過去のコミットの状態に戻す方法
(過去コミットにcheckoutではなく、ローカルのファイルだけ戻す)


例えば調子にのって、

$ git reset HEAD~

$ git reset --hard

などでファイルを消してしまった場合。

1. コミット履歴確認

$ git reflog
908db80 HEAD@{0}: XXXX
5ca7114 HEAD@{1}: XXXX
5ca7114 HEAD@{2}: XXXX <- ここの状態に戻したい
1c1fb47 HEAD@{3}: XXXX

2. 指定のコミットの状態に戻す

$ git reset --hard HEAD@{2}

これで、ローカルのファイルたちが、過去の状態に戻る。
あとはこれを編集するなりして、commitなりpushすればOK

【AWS IoT ボタンでメッセージ送信3】赤ちゃん記録でおしっこ・うんち・○っぱいをSlackへ送信

赤ちゃんの記録を付けるためにAWS IoT ボタンを使い、おしっことうんちと○っぱいの度にボタンを押して、Slackに送信することで記録する。というのを作成した。
その備忘録をつける。


これは以前のAWS IoT 1-ClickでSMS送信のやつと、PythonでSlack送信していたやつを組み合わせると割と簡単にできた。
ahrk-izo.hatenablog.com
ahrk-izo.hatenablog.com


[前提]

  • 上記のリンクでAWS IoT 1-ClickでIoTボタンを押してSMS送信できていること

スポンサーリンク



1. Lambda関数作成

AWSコンソールでLambda関数をつくる。(デプロイツールとかめんどうなのでブラウザでやっちゃう)

Lambda > 関数 > 関数の作成
「一から作成」
f:id:ahrk-izo:20191231000702p:plain:w500

基本情報として、
関数名 : slack_notification(すきな関数名でよい)
ランタイム : Python 3.7
「関数の作成」
f:id:ahrk-izo:20191231000732p:plain:w500


そしてこの部分にコードを書く。
f:id:ahrk-izo:20191231001822p:plain:w500


コードは以下の通り。

from datetime import datetime, timezone, timedelta
import json
import os
import urllib.request


def lambda_handler(event, context):
    
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    message = ''
    color = '#00bfff'
    if click_type == 'SINGLE':
        message = 'おしっこ!'
    elif click_type == 'DOUBLE':
        message = 'うんち!!'
        color = '#ffa500'
    elif click_type == 'LONG':
        message = 'おっぱい!'
        color = '#ffc0cb'

    dt_now_jst = datetime.now(timezone(timedelta(hours=9)))
    message += '({})'.format(dt_now_jst.strftime('%Y年%m月%d日 %H:%M:%S'))

    slack_message = {
        'attachments': [
            {
                'text': message,
                'color': color,
            }
        ]
    }

    url = os.environ['URL']
    method = 'POST'
    headers = {'Content-Type': "application/json"}
    json_data = json.dumps(slack_message).encode("utf-8")

    try:
        request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
        with urllib.request.urlopen(request) as response:
            response_body = response.read().decode('utf-8')
            return response_body
    except Exception as e:
        raise e


環境設定も作成(必須ではないがテストで切り替えるときとか便利)
f:id:ahrk-izo:20191231001727p:plain:w500

残りはデフォルトのまま、右上の保存。
f:id:ahrk-izo:20191231002149p:plain:w500

これでLambda関数は完成。あとはAWS IoT 1-Clickサービスで作成したプロジェクトにこのLambda関数を設定するだけ(冒頭のSMS送信したリンクで作ったやつ)


2. AWS IoT 1-Clickのプロジェクトに作成したLambda関数を設定

AWS IoT 1-Click > 管理 > プロジェクト > 作成したプロジェクトを選択(SMS送信のやつ)
f:id:ahrk-izo:20191231002702p:plain:w500

テンプレートのアクション > 編集
f:id:ahrk-izo:20191231002910p:plain:w500

自分の電話番号でSMS送信する設定になっているから、これを編集する。
f:id:ahrk-izo:20191231003035p:plain:w500

アクションを「SMSを送信する」から「Lambda関数の選択」に変更
f:id:ahrk-izo:20191231003203p:plain:w300

リージョンを選んで、作成したLambda関数を選択する。
f:id:ahrk-izo:20191231003308p:plain:w300


これで完了。「プロジェクトの更新」をすればOK。

【AWS IoTボタンでメッセージ送信 2 】AWS IoT 1-Clickで自動作成されたLambdaを修正してみる

先日、AWS IoTボタンを購入し、AWSに登録、SMS送信までを行った。
ahrk-izo.hatenablog.com

ここでは「AWS IoT 1-Click」というサービスに予め用意されている「SMSに送信する」というアクションを利用した。
実際には、ここでLambda関数が自動で作成され、それが紐付いて動作している。なので今回はそのLambda関数を少し編集して、ボタンのクリックタイプ(シングル、ダブル、長押し)によってメッセージを変えてみる。


[前提]

  • 上記の記事でAWS IoTボタンによってSMS送信ができていること
  • AWSコンソールにサインイン済み

さて目次

スポンサーリンク



1. 紐付いているLambda関数名を確認する

AWS IoT 1-Click」で作成したプロジェクト(のプレイスメント)に紐付いているLambda関数を確認する。
AWS IoT 1-Click」サービスを選択。
管理 > プロジェクト > 作成したプロジェクトを選択
f:id:ahrk-izo:20191130183210p:plain:w500

テンプレート > アクション の情報をみる
f:id:ahrk-izo:20191130182956p:plain:w500


「iot1click_onclick_sms_2019110311...」となっている。これは(自動で作成された)Lambda関数の名前だ。(「ラムダ」と読む)
つまり、このプロジェクトではボタンを押されたら、このLambda関数にキックされ、ここに書かれた実装コードが走る。それによってSMS送信されている。

Lambdaとは?
このLambda関数は、「AWS Lambda」というサービスで管理されている。
AWS Lambdaとは簡単にいうと、バックエンドで簡単にプログラムを実行できるサービス。
実装コードをアップロード(もしくは直接書いて保存)して、少し設定すれば、何かしらのキック(きっかけ)でそのコードが実行できる。その「キック」は定期実行もできるし、なにかしらのサービスとの連携でもできる。今回は「AWS IoT 1-Click」のサービスからのキックということだ。
※定期実行も正確にいうと「CloudWatch Events」というサービスとの連携


2. Lambda関数の内容を確認する

次にそのLambda関数を確認してみる。
「Lambda」サービスを選択。
f:id:ahrk-izo:20191130183415p:plain:w400

Lambda > 関数
「iot1click_onclick_sms_20191103113059」というLambda関数があるね。Python 3.6で書かれたコードのようだ。
f:id:ahrk-izo:20191130183621p:plain:w500
※関数名は、iot1click_onclick_sms_ + 作成日時になるんだろうな。


そのLambdaを選択し、中に入る。

このLambda関数が設定やコードがわかる。

まず目に入るのは「Designer」。
これを見ると、CloudWatch Log と SNS というAWSの他のサービスと連携していることがわかる。
f:id:ahrk-izo:20191130183906p:plain:w500

簡単に言うと、
Amazon CloudWatch Logs」は、AWSのいろんなサービスのログを監視して保存・閲覧できるサービス。これによってLambdaの実行内容(エラーとか)チェックできる。
Amazon CloudWatch Logs とは - Amazon CloudWatch Logs

Amazon SNS」は、EメールやSMSなどでメッセージを配信できるサービス。これによってボタンを押したときケータイにSMSが送信できている。このSNSの設定も自動でされている(なんて便利!)。こっちの説明は割愛する。
Amazon SNS(サーバーレスアプリのための pub/sub メッセージングサービス)| AWS


さて次は、「関数コード」。
ここはいわゆる「実装コード」。つまりボタンを押されたら、このコードが走るということ。
f:id:ahrk-izo:20191130200335p:plain:w600

ランタイム : Python 3.6
ハンドラ : lambda_function.lambda_handler

(lambda_function.py)

from __future__ import print_function

import boto3
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

sns = boto3.client('sns')


def lambda_handler(event, context):
    logger.info('Received event: ' + json.dumps(event))

    attributes = event['placementInfo']['attributes']

    phone_number = attributes['phoneNumber']
    message = attributes['message']

    for key in attributes.keys():
        message = message.replace('{{%s}}' % (key), attributes[key])
    message = message.replace('{{*}}', json.dumps(attributes))

    dsn = event['deviceInfo']['deviceId']
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    message += '\n(DSN: {}, {})'.format(dsn, click_type)

    sns.publish(PhoneNumber=phone_number, Message=message)

    logger.info('SMS has been sent to ' + phone_number)

せっかくなので、部分的にざっくり解説してみる。

スポンサーリンク




モジュールのインポート

from __future__ import print_function

import boto3
import json
import logging

冒頭のこれらの部分は、このLambda関数に必要なモジュールをインポートしている。Pythonは必要なモジュールはこうやっていちいち書く(個別の説明は割愛)


ログの準備

logger = logging.getLogger()
logger.setLevel(logging.INFO)

これらは、ログの準備。lambda_handler関数の中で logger.info() を使ってログ出力しているが、それを使うための準備。ログなのでSMS送信のプログラムには直接関係はしない。なので、ログ関連は省略する。


SMSサービス連携の準備

sns = boto3.client('sns')

Lambda関数AWS SNSサービスを使うための準備。boto3というモジュールを使うことで、あっさり連携できる。Pythonって便利。(boto3の中身は知らんけど、ドキュメント見ながら使えばそうなるんだから)


ハンドラ関数

def lambda_handler(event, context):
  ...

次はこちらの関数内を見ていく。「AWS IoT 1-Click」からこの関数が呼ばれ、実行される。その時引数としてeventが渡される。(コードを見ると、contenxtは使われていないから、eventのみの情報があるんだろうな)


eventの中身

    attributes = event['placementInfo']['attributes']

    phone_number = attributes['phoneNumber']
    message = attributes['message']

AWS IoT 1-Click」(のtest-projectのsend-smsというテンプレート)から渡された情報を関数に入れている。
電話番号とメッセージということがわかる。


プレイスメント属性の値をメッセージに使う

    for key in attributes.keys():
        message = message.replace('{{%s}}' % (key), attributes[key])
    message = message.replace('{{*}}', json.dumps(attributes))

ここはsend-smsというテンプレート内で設定したプレイスメントの属性の各内容を、message内の{{ナントカ}}という文字の部分に置換している。
例えば
message : テストメールです。{{key1}}は{{key2}}です。
key1 : AWS
key2 : 最高
となっていたら、message変数に入るのは、
「テストメールです。AWSは最高です。」
となる。


SMS送信

    dsn = event['deviceInfo']['deviceId']
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    message += '\n(DSN: {}, {})'.format(dsn, click_type)

    sns.publish(PhoneNumber=phone_number, Message=message)

最後の部分。ここもわかりやすい。
バイスのDSN(登録しているボタンのID)とクリックタイプ(シングル or ダブル or 長押し)を受け取り、メッセージに追記している。
最後は冒頭にboto3を使って準備していたsnsオブジェクトを使ってSMS送信。引数には電話番号とメッセージ。

これによって以下のようなメッセージがケータイのSMSに送信される。
f:id:ahrk-izo:20191124094143p:plain:w200


3. Lambda関数を編集してみる。

実際にコードを編集してみて、どんなメッセージが送信されるか確かめてみる。それによって理解も深まる。

終盤のこの部分だけ編集してみる。

    dsn = event['deviceInfo']['deviceId']
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    message += '\n(DSN: {}, {})'.format(dsn, click_type)

繰り返しだが、ここはデバイスのDSNとクリックタイプをメッセージに追記している。
ここを以下のように修正してみる。

    dsn = event['deviceInfo']['deviceId']
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    message += '\n(ClickType: {})'.format(click_type)  # <- ここだけちょっと変えた

メッセージにはクリックタイプだけを追記するようにした。

右上の「保存」を押して、
f:id:ahrk-izo:20191130200754p:plain:w400


実際にボタンを押すと、ばっちり変更が反映されいる!
f:id:ahrk-izo:20191130195640p:plain:w200


実際にクリックタイプによって、SINGLE、DOUBLE、LONGとなるので、if文使って、

    if click_type == 'SINGLE':
        message += '1回押したぞい!'
    elif click_type == 'DOUBLE':
        message += '2回も押しちゃった'
    elif click_type == 'LONG':
        message += '長押しっす!'

とやってもよい。


これで、IoTボタンを押されたとき、どのようにSMS送信されているか、その仕組みと実装コードが理解できた。1からこの仕組を作るのは大変だけど、ある程度自動で作られて、そこを修正するくらいならそこまでハードルは高くない。

やはり動くものができて、それをカスタマイズできると楽しいな。

スポンサーリンク



おまけ Amazon SNSサービス

自動で設定されたSNSサービスの方もチェックしてみる。

サービスから(snsと検索して)「Simple Notification Service」を選択。
f:id:ahrk-izo:20191130201745p:plain:w400

リージョンを米国東部(バージニア北部)に変更して、トピックを見ると、「NotifyMe」というのが作られている。
f:id:ahrk-izo:20191130202432p:plain:w500

やはり、SNSアメリカのリージョンに作られ、国際電話でSMS送信されているんだな。



あれ?関係ないけど、いつの間にかリージョン選択のところに「us-east-1」とか出てた。いつもこのコードがあやふやでググってたから便利になった!
f:id:ahrk-izo:20191130202712p:plain:w250



以上。

【AWS IoTボタンでメッセージ送信 1 】AWS IoT 1-Clickで簡単にSMS送信までやる

AWS IoT ボタンを購入し、いろいろ遊んでみた。
まずは使い始めの導入編として、ボタンを押したら、ケータイのショートメールにメッセージが送信される、というところまでの内容を備忘録として記述する。

ここをポチッと押したら
f:id:ahrk-izo:20191124094052p:plain:w300

こんなSMSメッセージが来る
f:id:ahrk-izo:20191124094143p:plain:w300

という内容

[前提]

  • 自宅Wi-Fi環境がある
  • AWSアカウントがある
  • スマホを持っている(BluetoothはON)
  • 若干料金が発生する(無料じゃない)

[料金について]
まずこれを利用するには、料金が発生する。(本体デバイスとは別に)
料金 - AWS IoT 1-Click | AWS
こちらによると、デバイスを登録して、有効にしたデバイスの数だけ料金が発生する。
f:id:ahrk-izo:20191124094743p:plain:w500

例えば、1ヶ月間、1台のデバイスを有効にしていたら0.25ドル(約27円)。100台なら25ドル(約2700円)。
遊びで1台だけやるなら問題ないでしょう。また、使わないときは無効にしていれば料金は発生しないので、そのときは無効にするのを忘れずに。(日割りになる)

また、今回は導入としてはじめから用意されているSMS送信の仕組みを利用するわけだが、そこにはAWSSNSというサービスを利用していてそこの料金が発生する。これはメール送信する(ボタンを押す)ごとに発生。(料金 - Amazon SNS | AWS)ぼくの場合は、テストとして10回くらい送信したら0.65ドル(約70円)かかった。

うーん。これはなかなか高いので、たくさん送信するのは控えたほうがよい。
とりあえずここは、導入編として数十円身銭を切ってやってみよう。

(これをSlack送信にするとこの部分は無料になるので、それは別な記事に書く)

ということで目次はこんな感じ

スポンサーリンク



[準備1] AWSアカウント

AWSアカウントがないと始まらないので、もしない人は作る。
参考:
ahrk-izo.hatenablog.com


[準備2] デバイスの購入

本体のデバイスも当然必要。AWS IoT ボタンの購入で本体を購入する。
f:id:ahrk-izo:20191124125431p:plain:w300

[準備3] スマホアプリをダウンロード

バイスを登録する際、スマホアプリが必要になる。iPhoneまたはAndroidで「AWS IoT 1-Click」をダウンロードしておく。
f:id:ahrk-izo:20191124103753p:plain:w300

[準備4] AWSコンソールにサインインとリージョン変更

AWSコンソールにサインインする。(コンソールってのはブラウザで操作するやつ)
このときサインインするのは、IAMユーザーでするとよいでしょう。
まぁルートユーザーでも作れるが、AWS的に推奨されていないので、IAMユーザーを作成してそのユーザーで操作していくのがよい。

IAMユーザーについては以前書いた。作成方法もあるのでよかったらどうぞ。
ahrk-izo.hatenablog.com


リージョンを変更する
たいていサインインすると、「リージョンは米国東部(バージニア北部)」だったりするので、「アジアパシフィック(東京)」に変更する。
f:id:ahrk-izo:20191124090347p:plain:w300
もちろんリージョンは東京でなくてもいいんだけど、どこのエリアのデータセンター使うかだから、住んでいる場所の近くのほうが通信速度はやっぱり速いので近くのリージョンにしておくのがベスト。
ちなみに、これから利用する「AWS IoT 1-Click」のサービスは、米国、EU、東京のリージョンのみ対応している(2019.11現在)。東京あってよかった。

さて、準備が終わったので、さっそく「AWS IoT 1-Click」のサービスを使っていく。

1. AWSにデバイスを登録する(AWSコンソール)

購入したデバイスを自分のAWS環境に登録することから始まる。
まずAWSコンソールで、「AWS IoT 1-Click」サービスを選択する。
f:id:ahrk-izo:20191124091214p:plain:w400
検索で「iot」などと入力すれば候補としてでてくる。

オンボード > デバイスの登録
f:id:ahrk-izo:20191124091819p:plain:w500

「登録コードまたは登録するデバイスのID」に購入したデバイスのIDを入力する
f:id:ahrk-izo:20191124092032p:plain:w400

AT&T LTE-M Button 購入確認メールに記載せれている登録コード(例: C-123456789012)を使用できます。デバイスIDはデバイスまたはパッケージにDSNまたはS/Nとして印刷されています。

このID(DSN)は、本体や箱に書いてある。
f:id:ahrk-izo:20191124092431p:plain:w200

f:id:ahrk-izo:20191124092502p:plain:w200


ちなみに、

バイスの登録とは、AWS IoT 1-Click デバイスをアカウントに関連付ける方法です。新しく登録されたデバイスはデフォルトでは「無効」ですが、プロジェクトに追加すると即時アクティブ化されます。

と書いてあるので、デバイスを登録しただけではまずは無効となっているので、料金は発生しない。

ID(DSN)を入力したら、登録
f:id:ahrk-izo:20191124103123p:plain:w500

バイス ID が入力されました。このプロセスを完了には、そのデバイスを手元に用意し、物理的にボタンをクリックして登録の最終処理を実行する必要があります。iOS または Android アプリを使用して AWS IoT エンタープライズボタンを設定することをお勧めします。

ここに書いてあるとおり、ここまではデバイスの番号を登録しただけで、本体と通信はできていない。通信まで完了して登録が完了する。

「登録」を押したらコンソール(ブラウザ)はこんな画面になる
f:id:ahrk-izo:20191124124736p:plain:w500

スマホアプリを使用してのデバイスWi-Fi接続を待っている状態。ではスマホアプリで設定していく

2. AWSにデバイスを登録する(スマホアプリとデバイス

スマホで「AWS IoT 1-Click」アプリを起動する。
f:id:ahrk-izo:20191124125833p:plain:w200

AWSアカウントでサインインする。こちらはメールアドレス使ったルートユーザーで。

日本語の方が安心なので、日本語に変更する。
f:id:ahrk-izo:20191124130156p:plain:w200

メールアドレスと、パスワードを入力。
f:id:ahrk-izo:20191124130417p:plain:w200

サインインできたらセットアップする。
f:id:ahrk-izo:20191124130505p:plain:w200

バイスの登録はコンソールでやったので、省略。下にスクロール。
f:id:ahrk-izo:20191124130703p:plain:w200
※ここでのAWSリージョンは「米国西部(オレゴン)」でよい。登録自体は現在(2019.11)このリージョンにすべて登録されるらしい。メールを送信させるなどのプロジェクトは東京リージョンでも作成できる(ややこしい)

Wi-Fiを設定」
f:id:ahrk-izo:20191124131206p:plain:w200

バイスIDのスキャンをする
f:id:ahrk-izo:20191124131314p:plain:w200

この箱に貼ってあるバーコードをスキャンする
f:id:ahrk-izo:20191124092502p:plain:w200

スキャンに成功(もし失敗した場合は手入力でやってみる)
「設定」に進む
f:id:ahrk-izo:20191124131612p:plain:w200

しばらくスマホアプリの指示通りすすむ。
f:id:ahrk-izo:20191124131718p:plain:w200

バイスを約6秒間押す。青く点滅したら離す。(押しすぎると赤く点灯してしまって失敗する。そうなったらアプリで「←」を押してもう一度やればよい)
そうそう、BluetoothはONにしておくこと。
f:id:ahrk-izo:20191124131910p:plain:w200

自宅のWi-Fiを選び、パスワードを入力して「設定」
(「マイWi-Fiネットワークを保存」はとりあえずやらなかった)
f:id:ahrk-izo:20191125230955p:plain:w200
※ここまで、青く点滅している間に行うこと。できなかったら「←」で戻ってもう一度。

処理中…
f:id:ahrk-izo:20191125231152p:plain:w200


バイスの点滅が、青→白→緑に変わったら成功
スマホの画面はこうなる
f:id:ahrk-izo:20191125231238p:plain:w200



AWSコンソール(ブラウザ)の画面を見ると、「1/1 登録済み」となっている。成功だ。「完了」を押す。
f:id:ahrk-izo:20191125231325p:plain:w400


管理 > デバイス
バイスが登録されているのが確認できる。デバイスリージョンは「us-west-2」、つまり米国西部(オレゴン)に登録されている。
プロジェクトはまだ作成していないので、「無効」になっている。
f:id:ahrk-izo:20191125231437p:plain:w500


ここまでできれば、デバイスの登録は完了。
あとはボタンを押したらSMSが送信されるプロジェクトを作っていく。

スポンサーリンク



3. プロジェクトを作成する

「ボタンを押したらSMSが送信される」というプロジェクトを作成する。
具体的には「プロジェクト」を作成し、そのプロジェクトに登録する「プレイスメント」というのを作成する。


管理 > プロジェクト
「プロジェクトの作成」
f:id:ahrk-izo:20191125231621p:plain:w500



プロジェクト名と説明(省略可)を入力し、「次へ」
(プロジェクト名:test-project)
f:id:ahrk-izo:20191125231708p:plain:w500


バイステンプレートの定義。「開始」をクリック
f:id:ahrk-izo:20191125231753p:plain:w500

バイステンプレートは、デバイスのタイプとそれがトリガーする Lambda 関数を指定します。

ここに書いてある通り、デバイステンプレートは、ボタンが押されたらどのLambda関数がキックされるかを指定する。ここではAWS IoT 1-Clickで予め用意されている「SMSを送信する」Lambda関数を使うので、自分で用意する必要はない。
(逆に言うと、自分でLambdaを用意できれば、他のことに応用できる。Slackに送信するとか)


バイスタイプは「すべてのボタンタイプ」しかないようなので、それをクリック
f:id:ahrk-izo:20191125231833p:plain:w500



バイステンプレート名とアクションを指定する。
バイステンプレート名:send-sms
アクション:SMSを送信する
f:id:ahrk-izo:20191125232032p:plain:w500


「SMSを送信する」を選択すると、下に電話番号とメッセージの内容を入力するフォームが現れるので、それぞれ入力し「プロジェクトの作成」
(必須の電話番号のデフォルト値、必須のSMSメッセージのデフォルト値)
f:id:ahrk-izo:20191125232126p:plain:w500
※国際電話になるので、090ではなく、+8190から始める。
※属性の名前は空でよい


「プロジェクトとテンプレートが正常に作成されました」
これでプロジェクトはできた。でもまだ動かない。

このプロジェクトに登録するプレイスメントを作成する。
「プレイスメントの作成」
f:id:ahrk-izo:20191125232210p:plain:w500



プレイスメント名を入力し、「デバイス選択」をクリック
(プレイスメント名:test-placement)
f:id:ahrk-izo:20191125232331p:plain:w500



先程登録したデバイスのID(DSN)であること確認して、選択。
f:id:ahrk-izo:20191125232448p:plain:w500


プレイスメントの属性は、messageとPhoneNumberが先程登録したメッセージと電話番号であること確認して、「プレイスメントの作成」
f:id:ahrk-izo:20191125232555p:plain:w500


プレイスメントができた
f:id:ahrk-izo:20191125232629p:plain:w500



ダッシュボードに戻り、内容を確認する。
管理 > プロジェクト
作成したプロジェクト(test-project)が登録されている。
f:id:ahrk-izo:20191125232719p:plain:w600



管理 > デバイス
バイスが「有効」になっている。これで使えるぞ!
f:id:ahrk-izo:20191125232750p:plain:w600



5. デバイスのボタンを押してみる

ここまでくればもう動くはず!
ボタンをポチっ
f:id:ahrk-izo:20191124094052p:plain:w300


2〜3秒後
スマホにSMSが届いた!
f:id:ahrk-izo:20191125233017p:plain:w200


登録したメッセージに、デバイスのDSNと「SINGLE」という文字。この「SINGLE」というのはボタンのクリックタイプ。実はクリックタイプは3種類あり、それぞれ以下のようになっている。

  • SINGLE : シングルクリック
  • DOUBLE : ダブルクリック
  • LONG : 長押し

用意されているLambda関数の中でこのクリックタイプを認識して表示していること想像できる。自分でこのLambda関数にかかれているプログラムを編集できれば、いろいろできそうだ。それはまた別な記事に書く。

(2019/11/30 追記)
このLambda関数を編集してメッセージを確認する記事を書いた。興味ある方はどうぞ。
ahrk-izo.hatenablog.com

バイスやプロジェクトの管理

使わないときは、たとえわずかでも料金が発生するので、無効化するとよい。
バイスの無効化は、
管理 > デバイス > デバイスを選択して > アクション > 選択したデバイスの無効化
f:id:ahrk-izo:20191125233312p:plain:w600



プロジェクトに登録したプレイスメントの編集は、
管理 > プロジェクト > プロジェクト選択し中に入り > アクション > 編集 からできる。
f:id:ahrk-izo:20191125233432p:plain:w600



これで導入編として、AWS IoTボタンを押して、SMS送信ができた。
その後は、これを改良して、ボタンのクリックタイプによってメッセージの内容を変えたり、SMSでなくSlackへ送信するようにしていく。

スポンサーリンク



おまけ(請求金額)

テストとして10回くらいSMS送信をした。料金はいくらくらい発生しているか確認してみる。

マイ請求ダッシュボード
0.97ドル(約105円)。内訳としては、SNSが0.65ドル、IoT1Clickが0.23ドル、税金で0.09ドルといったところ。

f:id:ahrk-izo:20191125233623p:plain:w300


心配な方は、ある料金があるしきい値を超えたらメールが来るように設定しておくとよい。
ahrk-izo.hatenablog.com


ちなみに、今回はAWSの知識がそんなになくてもいいので、特に書籍は使っていないが、AWSを本当の基礎からやるならこの本は良かった。ということでおすすめしておく。



参考にさせて頂いたサイト:
dev.classmethod.jp

chasuke.com


以上。

【意外と簡単】PythonでプログラムからSlackに通知を飛ばしてみる

PythonでSlack通知を試したくなったので、いろいろググって試してみたら意外とあっさりできた。
その時のメモを備忘録として残しておく。

[前提]

こんなもんかな。

Python3のインストール方法については、以前書いてみた。よかったら参考にどうぞ。

Macの場合
【切り替え可能】pyenvでPython3系とAnacondaの両方をインストール for Mac - ろきメモ【ROKI MEMO】- ろきsanの備忘録 -

Windowsの場合
【Pythonインストール for Windows10 64bit版】環境変数PATHや実行コマンドも解説してみる - ろきメモ【ROKI MEMO】- ろきsanの備忘録 -


目次は以下の通り


スポンサーリンク



1. Webhook URLを取得する

ここにアクセスする。
https://slack.com/services/new/incoming-webhook


ブラウザでサインインすれば、管理画面になるので、
ワークスペース、チャンネルを指定して、
「Incoming Webhook インテグレーションの追加」をクリック
f:id:ahrk-izo:20191117132111p:plain:w500


これでプログラムで使うWebhook URL が取得できた。
f:id:ahrk-izo:20191117132441p:plain:w500

ここには、Webhook URL以外にも、アイコンや名前などの設定あるが、今回は特に何もしない。

2. Pythonコードを書く

任意のディレクトリに、function.py というファイルを作成。

[function.py]

import urllib.request
import json

def handler(event, _):
    message = 'テストメッセージです'
    title = 'title'
    slack_message = {
        'attachments': [
            {
                'text': message,
            }
        ]
    }

    url = '取得したWebhook URL'
    method = 'POST'
    headers = {'Content-Type': "application/json"}
    json_data = json.dumps(slack_message).encode("utf-8")

    try:
        request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
        with urllib.request.urlopen(request) as response:
            response_body = response.read().decode('utf-8')
            return response_body
    except Exception as e:
        raise e


if __name__ == '__main__':
    response_body = handler('test', '')
    print(response_body)

おそらくコピペでいけるはず。(URLのところ以外は)

3. Pythonプログラムを実行する

ターミナルで

$ python function.py
ok

あっさりSlackに送信されました。
f:id:ahrk-izo:20191117134025p:plain:w300


スポンサーリンク



4. ちょっとカスタマイズしてみる。

上記のメッセージはほんとデフォルトの感じ。
通知が無事できたらちょっと設定やプログラムコードを修正して、カスタマイズしてみる。


まず名前とアイコン。
webhookを取得した設定画面(ブラウザ)の下の方に、名前とアイコンを設定するところがあるので、修正して設定を保存する。
f:id:ahrk-izo:20191117134911p:plain:w500

もう一度プログラムを実行してみる。
f:id:ahrk-izo:20191117135448p:plain:w300
ばっちし!


次は、通知の色を指定してみる。
先程のコードのこの部分に「color」を追加する。

    message = 'テストメッセージです'
    title = 'title'
    color = '#ff0000'  # <- 追加
    slack_message = {
        'attachments': [
            {
                'text': message,
                'color': color,  # <- 追加
            }
        ]
    }


再度実行してみると、
f:id:ahrk-izo:20191117140042p:plain:w300
色がついてばっちし!

色を変えるとこんな感じ。
f:id:ahrk-izo:20191117142932p:plain:w300

せっかくプログラムで書いているので、条件分岐なので、メッセージや色を変えると便利な通知プログラムになるかも。

という感じで、最低限の通知プログラムの備忘録でした。


参考にしたサイト

とりあえずこちらでweb hookの取得方法を。
qiita.com

Pythonでの通知はこちらを参考に。
qiita.com
他のサイトでは(slack通知に使う)HTTPの使用を、requestsというモジュールを使っているが、こちらはurllib.requestを使っている。
これだと、pipなどでのインストールもいらないし、AWSのLambdaで使用したくなったとしてもこのままでいけるのでよい。

slack通知のカスタマイズはこちらを参考にした。
qiita.com
いろいろあるので試してみるとおもしろいかと。

もちろん一番は公式ドキュメントを見るとよい。
slack.com



以上。

【AWSアカウント作成からコンソールログインまで】アカウント作成の手順

AWSを初めて使いだしたのが2018年6月。
Railsチュートリアル をやって、Cloud9を使ってみようというのがあったのがキッカケ。
あとのときは何もわからず、作って、結局RailsチュートリアルではCloud9を使わず最後までやったけど、別でAWSは少し触れてて、その後仕事でAWSをたくさん使うようなったので、大いに役に立った。

振り返りも含め、アカウント作成したときのメモをもとに、アカウント作成を改めて備忘録に残しておく。(Evernoteに雑だけどいろいろ残してある)
これは、AWSアカウント作成手順のメモである(2018/06時点の作成)。


目次はこんな感じ。

スポンサーリンク



1. AWSのサイトへアクセス

まずは以下のサイトにアクセス
aws.amazon.com

こんな感じ。
f:id:ahrk-izo:20191109082811p:plain:w500
「今すぐ無料アカウント作成」

2. 基本情報を入力

以下で、

  • Eメールアドレス
  • パスワード
  • AWSアカウント(これはあとでも変更可能)

f:id:ahrk-izo:20191109083009p:plain:w300
「続行」

3. 連絡先情報を入力

名前や電話番号などを入力する。
後でTELでの確認あるので、間違えないように)
f:id:ahrk-izo:20191109083245p:plain:w300

4. 支払情報を入力

クレジットカードの情報を入力する。
(無料枠内で使っていれば請求はないが、クレジットカードは登録する必要ある)
f:id:ahrk-izo:20191109083520p:plain:w300

料金発生が心配な方は、請求の確認と、アラート(メールがくる)設定もできるので、アカウント作成後やっておくとよい↓
【AWS メトリクス指定で請求アラートの設定】無料枠・料金しきい値超えでメール送信 - ろきメモ【ROKI MEMO】- ろきsanの備忘録 -

5. 電話による確認

電話による本人確認を行う。
(手持ちの携帯電話とWeb画面による確認)
f:id:ahrk-izo:20191109083953p:plain:w300
電話番号が間違いないか確認して、「すぐに電話を受ける」

ブラウザ画面上に4桁の数字が表示される。

電話がなる。

電話でその4桁を入力する。

これで完了!(本人確認の終了)
f:id:ahrk-izo:20191109085004p:plain:w400
「続行」

※現在(2019/11)公式サイトの作成方法みると、

SMSまたは電話で4桁の数字を得る

ブラウザ画面にその4桁の数字を入力

という流れのようだ。
4桁の入力が電話かWebか変わっているので注意。

AWS アカウント作成の流れ | AWS

というか、公式がすごいわかりやすくなってる。。。(イラストもあるし)

6. サポートプランを選ぶ

無料か有料かのプランがあるので選択する。
f:id:ahrk-izo:20191109085650p:plain:w400
個人でやるので、ベーシックプラン(無料)でよし。
(有力だとAWSの人のサポートあるんだな)


これでAWSアカウント作成は完了!
実際はアカウント有効になるまで少し時間がかかる。(自分の場合は10分くらいできた)

f:id:ahrk-izo:20191109085851p:plain:w500
※これは案内メールのやつなので、送信しなくてもよい(してない)


スポンサーリンク



7. アカウント有効なりましたメールの受信を確認

「アカウント有効になりました」メールが届いたら、AWSが使えるようになるので、少し待つ。

「アマゾンウェブサービスへようこそ」というメールは、アカウント有効メールとは違うのでまだ。
f:id:ahrk-izo:20191109091110p:plain:w500

「お客様の AWS アカウントの準備ができました - 今すぐ始めましょう」のメールが届けば完了!
f:id:ahrk-izo:20191109090951p:plain:w500

これで大丈夫!

8. コンソールにログインしてみる

ログインして確認してみる。
f:id:ahrk-izo:20191109092754p:plain:w500
右上の「コンソールへログイン」

f:id:ahrk-izo:20191109091304p:plain:w500
メールアドレスを入力、パスワード入力

ログイン成功!!
f:id:ahrk-izo:20191109091459p:plain:w500


ちなみに、このブラウザ上で色々と操作できる部分を「AWSコンソール」というので、
「コンソールにログイン」
「コンソールでEC2を作成」
とか言われたら、この画面にログイン、この画面でEC2(仮想サーバ)を作成するっとことなので覚えておくとよい。


ということで、これでAWSアカウント作成は完了。
お疲れさまでした。


スポンサーリンク



おまけ(請求アラート設定と、IAMユーザーについて)

途中でも書いたが、請求の確認方法と、請求があるしきい値を超えたらアラートとしてメールが送信される設定があるので、やっておくとよいかと。(しきい値は自由に設定できる)
ahrk-izo.hatenablog.com


また、ここでログインしたユーザーは、ルートユーザーといって、なんでもできちゃう権限が強いユーザー。実際にAWSを使っていくのは、IAMユーザーといって、権限を制限したユーザーで行っていったほうがよいらしい。
それは個人で1人でやる場合も。
まぁ、ルートユーザーのみでいろいろやっていくもともできるんだけど、推奨ないので、IAMユーザーを作って、今後はそっちでログインして使っていくのがよい。

なので、このルートユーザーやることは、

  • 最初のログイン(この記事)
  • 請求確認と請求アラートの設定(上記リンク)
  • 最初のIAMユーザー作成(下記リンク)
  • アカウントの編集(住所変更やクレジットカードの更新など)

のみということになる。そうしたほうがよい。


最初のIAMユーザー作成は、以下を参照。
ahrk-izo.hatenablog.com


以上。

【ターミナルのほんとの基本だけ】iTerm2のショートカットキー

Macで使用しているターミナルをiTerm2。
基本的なショートカットキーを備忘録として残しておく。
タブ内の移動や、分割ウィンドウ内での移動のキーバインド(ショートカットキー)が「どっちだっけ?」ってたまになるので、書いておく。
もっと細かいのもあるけど、それは別な記事に任せて、最低限使うものだけでよい。これだけでもストレスは減る(と思っている)。


設定
command + , => Preferences(設定画面を開く)

f:id:ahrk-izo:20191016223425p:plain:w400

分割
command + d => ウィンドウ分割(左右)
command + shift + d => ウィンドウ分割(上下)
タブ・ウィンドウ
command + t => 新しいタブの作成
command + n => 新しいウィンドウ作成
command + w => 閉じる
control + d => 閉じる

※「閉じる」は結局「exit」って打つけど

ウィンドウ・タブ選択
command + [ or ] => 分割ウィンドウ内の移動
command + shift + [ or ] => タブ内の移動


スポンサーリンク



背景の透明度の切り替え
command + u => 透明度の切り替え(トグル)

※背景の透明度は、Preferences(設定) > Profiles > WIndow > Transparency でスライダーで設定できる。
f:id:ahrk-izo:20191017232548p:plain:w500

ターミナルの表示・非表示
command + control + y => itermの表示・非表示

※このショートカットキーは、Preferences(設定) > Keys > Hotkeyで設定できる。
f:id:ahrk-izo:20191017233238p:plain:w400

検索
command + f => 検索(現ターミナル内)
command + option + e => 検索(全てのタブ)


うむ。こんな感じで良い。

【あとづけでエアコンを遠隔操作】eRemote mini セットアップ(WiFiもなんとかつながった)

今年(2019年)の夏も暑かった。
暑い日は自宅に帰ってからエアコン付けてたのでは遅いので、予め外から電源入れて、部屋を涼しくしておくのがよい。
今はそういう商品があって、スマホで簡単に実現できる。これが想像以上に快適だった。

夏も終わり、出番がなくなったが、冬にまた使うだろうから設定方法など備忘録しておく。
(今は電源抜いているので、また設定が必要だろうから)

必要なもの

  • スマホ
  • 自宅WiFi
  • eRemote mini (miniで十分だった)


さっそく設定を記述する。
基本は以下の公式のマニュアルを見ればなんとかなったが、WiFiがうまく設定できなかったときの対処もあったので、ちょっと丁寧に。
linkjapan.co.jp

スポンサーリンク



[目次]

アプリダウンロード

「eHome」アプリをダウンロードする。
(リンクになってないので、各自検索してDLしてください)
f:id:ahrk-izo:20191012150808p:plain:w200

本体を電源につなぐ

こんな感じ(USB電源につなぐ)
f:id:ahrk-izo:20191012152329p:plain:w300

アプリでアカウント登録

登録メールアドレスに認証コードを送る
f:id:ahrk-izo:20190819224515p:plain:w300


送られてきた認証コードと、任意のパスワードを入れて登録
f:id:ahrk-izo:20190819224928p:plain:w300


登録&ログイン成功!
まずこんな画面
f:id:ahrk-izo:20190819225202p:plain:w300

本体のセットアップ

「デバイスを追加」をタップ

「eRemote mini」 を選択
f:id:ahrk-izo:20190819230333p:plain:w300


セットアップ中・・・
f:id:ahrk-izo:20190819230732p:plain:w300


自動セットアップに失敗!
f:id:ahrk-izo:20191012151839p:plain:w300
ちょっと原因は結局わからなかったけど、上記のマニュアルの「セットアップに失敗した場合」を参考にやっってみる。
「別の方法(手動セットアップ)を試す」をタップ


こんな画面になったので、画面の指示に従う
f:id:ahrk-izo:20191012151744p:plain:w300
リセットボタン(小さい穴)を6秒以上押す

この小さい穴を
f:id:ahrk-izo:20191012152530p:plain:w300

こうやって
f:id:ahrk-izo:20191012152610p:plain:w300
本体のランプは高速点滅になる。

スマホ画面を見ると、「再度リセット」とあるので、もう一度(つまようじで)リセット。
f:id:ahrk-izo:20191012152924p:plain:w300
本体のランプは4回点滅を繰り返す。たぶんリセットできたので「次へ」をタップ。

この指示の通り、スマホのWiFi設定で「BroadlinkProv」を選択して、その後アプリ画面に戻って、自宅WiFi接続を試みる。
f:id:ahrk-izo:20191012153600p:plain:w300

よし!成功!
f:id:ahrk-izo:20191014103256p:plain:w300


スポンサーリンク



デバイス(エアコン)を追加する

操作対象のエアコンを追加して、操作できるまで設定する。

ホーム画面の「デバイス」を選択して、接続されているeRemote miniを選択。
f:id:ahrk-izo:20191014104007p:plain:w300

追加 > エアコンを選択
f:id:ahrk-izo:20191014104328p:plain:w300

自宅のエアコンのメーカーを選択
f:id:ahrk-izo:20191014222412p:plain:w300

この指示の通り、エアコンのリモコンで、本体に向けて電源ボタンを押す。
f:id:ahrk-izo:20191014104446p:plain:w300

ポチッと
f:id:ahrk-izo:20191014104704p:plain:w200

型番を選択
f:id:ahrk-izo:20191014104912p:plain:w300

実はここに自宅の型番が出てこない。。。
自宅にあるのは「MSZ-GV2817-W」というやつ。
でもリモコンは認識すればたぶん大丈夫だろうってことで、トップの「Mitsubishi_5701」選択。

はい。できた!エアコンも無事動いたぞ!
f:id:ahrk-izo:20191014105426p:plain:w300

トップに「エアコン」が追加されていればOK。ここを選択して操作していけばよい。
f:id:ahrk-izo:20191014105538p:plain:w300


風向きとか細かい設定はできないけど、自宅に帰る前に遠隔で部屋を涼しくしておくとか、暖かくしておくとかの目的としては十分。
(細かい設定するには、自宅帰ったら一旦スマホで電源OFFして、家のリモコンで電源入れ直して・・・ってやる必要があるどけ。まぁいいだろう。)


とにかく快適。

【Wi−Fiエラーは無線ダイレクト無効で解決!】Canon プリンター PIXUS TS8230 セットアップ方法 for Mac

プリンターの設定方法。

「Canon プリンター インクジェット複合機 PIXUS TS8230 ブラック (黒)」を購入したので、PCへのセットアップ方法を備忘録として記述する。


セットアップの実行ファイルをダウンロード
cweb.canon.jp


f:id:ahrk-izo:20191006221852p:plain:w400

ダウンロード完了
f:id:ahrk-izo:20191006221940p:plain:w400

同ページの「インストールについて」を見てみる
f:id:ahrk-izo:20191006222024p:plain:w400

ダウンロード/インストール手順
1. [ダウンロード開始] ボタンをクリックし、ファイルをダウンロードしてください。 ファイルの保存先は、お使いのコンピューターの設定をご確認ください。
2. ダウンロードしたファイルをダブルクリックして、ディスクイメージにマウントしてください。
3. マウントされたディスクイメージをダブルクリックしてください。
4. フォルダー内の "Setup"ファイルをダブルクリックすると、セットアップ画面が起動します。 画面の内容に従い、ソフトウエアのインストール、および、ご使用の製品の接続設定を行ってください。

1のダウンロードは完了している。

次は、(2)ファイルをダブルクリックして、ディスクイメージにマウントする。
「マウント」ってざっくり簡単に言うと、このPCで使える状態にするってこと。
難しい言葉使わなくてもいいのになー。

ダブルクリックしたら、デスクトップにディスクイメージができた。
f:id:ahrk-izo:20191006222646p:plain:w200


次は、(3)このマウントされたディスクイメージをダブルクリック。
f:id:ahrk-izo:20191006222912p:plain:w200
「Setup.app」があるね。

最後に、(4)Setup.appをダブルクリックして、セットアップ画面通りに行っていく。
f:id:ahrk-izo:20191006223052p:plain:w400
インターネットからインストールしたから、警告が出る。「開く」を選択。

MacはApp Store以外からダウンロードしたものをインストールしようとすると必ず警告がでる。親切だ。


f:id:ahrk-izo:20191006223253p:plain:w400
次へ

f:id:ahrk-izo:20191006223353p:plain:w400
Mac(このPC)のパスワードを入力して、「ヘルパーをインストール」

f:id:ahrk-izo:20191006223546p:plain:w400
「セットアップ開始」

f:id:ahrk-izo:20191006223632p:plain:w400
次へ

f:id:ahrk-izo:20191006223713p:plain:w400
わらわらとダウンロードしている

f:id:ahrk-izo:20191006223816p:plain:w400
日本を選んで「次へ」

f:id:ahrk-izo:20191006223903p:plain:w400
はい

f:id:ahrk-izo:20191006223945p:plain:w400
同意する

f:id:ahrk-izo:20191006224028p:plain:w400
接続確認中(無線でね)

f:id:ahrk-izo:20191006224225p:plain:w400
プリンターのシリアル番号と自宅のWi-Fiルータを確認したら「はい」

f:id:ahrk-izo:20191006224905p:plain:w400
「Setupは、キーチェーンに含まれるキー"***"へアクセスしようとしてます。」
→「常に許可」でOK。ルータのパスワード聞かれて、

f:id:ahrk-izo:20191006225029p:plain:w400
セットアップ中・・・

f:id:ahrk-izo:20191006225300p:plain:w400
接続に失敗しました!
ありゃ!

次へ

f:id:ahrk-izo:20191006225447p:plain:w400
とりあえず「プリンター本体でWi-Fi設定する」を選択してOK

以下のWebページが開いただけだった。
ugp01.c-ij.com

スポンサーリンク



自力でやってみる。

f:id:ahrk-izo:20191006225848p:plain:w300
画面を見ると、Wi-Fiのところがバツになっている。

エラー文を見ると、
f:id:ahrk-izo:20191006230051p:plain:w300
「・・・サブネット範囲が割り当てられているため、Wi-Fiの動作を停止します。無線ダイレクトを無効にするか、サブネット範囲を変更してください」
となっている。
どうやら無線ダイレクトを無効にすれば行けそう(サブネット範囲を変更するのは面倒くさそう)


f:id:ahrk-izo:20191006230542p:plain:w300
本体のタッチパネルで、歯車(設定)をタップ。

f:id:ahrk-izo:20191006230919p:plain:w300
本体設定

f:id:ahrk-izo:20191006231003p:plain:w300
LAN設定

f:id:ahrk-izo:20191006231045p:plain:w300
無線ダイレクト

設定 > 無線ダイレクトの有効/無効

f:id:ahrk-izo:20191006231436p:plain:w300
「Wi-Fiルーターを介さずにプリンターと無線対応機器を直接接続できます。設定を有効にしますか?」
→「しない」

f:id:ahrk-izo:20191006231633p:plain:w300
エラーなくたった!

スポンサーリンク



あとはPCのセットアップ画面の戻って、進めたら
f:id:ahrk-izo:20191006231757p:plain:w400
接続できた!
「次へ」

f:id:ahrk-izo:20191006231853p:plain:w400
わらわらっとインストール

f:id:ahrk-izo:20191006231944p:plain:w400
プリンターの追加

f:id:ahrk-izo:20191006232132p:plain:w300
プリンター名とか自動で入っているので、「追加」押すだけ

f:id:ahrk-izo:20191006232236p:plain:w400
次へ

f:id:ahrk-izo:20191006232323p:plain:w400
「実行」押したら、テスト印刷された。

f:id:ahrk-izo:20191006232401p:plain:w400
次へ

f:id:ahrk-izo:20191006232541p:plain:w400
ようやくセットアップ完了!
「次へ」

で、その他のソフトウェアもインストールして、

f:id:ahrk-izo:20191006232654p:plain:w400
ようやくインストール完了!

お疲れ様!


おまけ
シリアル番号の記載場所のついて
ugp01.c-ij.com