AIエージェントは、人工知能の進化と共に私たちの日常生活やビジネスの様々な側面で重要な役割を果たしてきました。このテクノロジーは、シンプルな自動応答システムから、複雑な意思決定をサポートする高度なアシスタントに至るまで、幅広い形で実現されています。AIエージェントの目的は、人間の作業を補助し、効率化することにありますが、その実現方法と応用範囲は非常に多岐にわたります。
本記事では、AIエージェントの基礎から最先端の応用例までを網羅的に紹介し、これらのシステムがどのようにして私たちの世界を変えているのか、そして将来どのような可能性を秘めているのかを探求します。AI技術の急速な進化によって、これまでにないほどの可能性が開かれつつある今、AIエージェントがもたらす変革について知ることは、あらゆる業界の専門家だけでなく、一般の人々にとっても重要です。この記事を通じて、AIエージェントの驚異の世界への理解を深め、その将来性について一緒に考えてみましょう。
AIエージェントの歴史は、20世紀半ばにさかのぼります。初期の段階では、人工知能研究は主に理論的な探求に限定されていましたが、時間が経つにつれて、具体的な応用への道が開かれていきました。以下のタイムラインでは、AIエージェントの歴史におけるいくつかの重要なマイルストーンを示しています。
このように、AIエージェントは数十年にわたる研究と開発の成果に支えられ、今日では私たちの生活に不可欠な存在となっています。次に、AIエージェントの主要な種類とそれぞれの特徴について詳しく見ていきましょう。
AIエージェントは、その機能や用途によって様々な種類に分類されます。ここでは、特に重要とされるいくつかの主要なカテゴリーについて紹介します。
チャットボットは、テキストまたは音声による対話を通じて、人間のユーザーとコミュニケーションを取るAIエージェントです。顧客サービス、オンラインショッピングアシスタント、健康相談など、幅広い応用があります。自然言語処理(NLP)技術を活用して人間の言語を理解し、適切な回答を生成します。
SiriやGoogle Assistantのような仮想アシスタントは、音声認識と自然言語理解を組み合わせたAIエージェントの一種です。これらは、ユーザーの質問に答えたり、カレンダーの管理、アラームの設定、天気予報の提供など、様々なタスクを実行できます。仮想アシスタントは、スマートフォンやスマートスピーカーなどのデバイスを通じて日常生活に密接に組み込まれています。
自律型エージェントは、環境の監視とそこでの自律的な意思決定を行うAIシステムです。これには、自動運転車、ドローン、ロボティックスなどが含まれます。これらのエージェントは、センサーからのデータを解析し、環境内でのナビゲーションやタスクの実行を可能にする複雑なアルゴリズムを利用しています。
NetflixやAmazonの推薦システムのように、ユーザーの過去の行動や好みに基づいて、関連する商品やコンテンツを提案するAIエージェントです。これらのシステムは、大量のデータを分析し、個々のユーザーにパーソナライズされた体験を提供することで、エンゲージメントの向上や売上の増加に貢献しています。
これらのAIエージェントは、様々な技術的基盤を用いて構築されており、それぞれが特定のニーズに応じたユニークな機能と応用範囲を持っています。次に、これらのエージェントを支える主要な技術について詳しく見ていきましょう。
AIエージェントの能力は、その背後にある複数の技術によって支えられています。これらの技術は、AIエージェントが複雑なタスクを処理し、人間のように学習し、適応することを可能にします。主要な技術基盤には、以下のようなものがあります。
機械学習は、AIエージェントにとって最も重要な技術の一つです。これは、データから学習し、その学習を基に新しい入力に対して予測や判断を行うアルゴリズムの集合体です。機械学習モデルは、大量のデータを処理し、その中からパターンを識別して学習します。この技術は、推薦システム、画像認識、自然言語処理など、多くのAIアプリケーションにおいて中心的な役割を果たしています。
自然言語処理は、コンピュータが人間の言語を理解し、生成する能力を開発するための技術分野です。NLPは、テキストデータの分析、意味の抽出、さらには言語生成に至るまで、幅広い応用があります。チャットボットや仮想アシスタントなど、自然言語を介してユーザーと対話するAIエージェントにとって、NLPは不可欠です。
深層学習は、機械学習の一部門であり、特に大量のデータから複雑な表現を学習するために設計されたアルゴリズムです。深層学習モデルは、多層のニューラルネットワークを使用して、画像、音声、テキストなどのデータから高レベルの抽象化を行います。この技術は、画像認識、音声認識、自然言語理解の分野で革命的な進歩をもたらしました。
強化学習は、特定の目標を達成するために最適な行動を学習するAIエージェントの訓練方法です。エージェントは、環境からのフィードバック(報酬やペナルティ)に基づいて行動を選択し、最終的に目標達成につながる最適な行動パターンを見つけ出します。自律型エージェントやゲームプレイの最適化など、さまざまな領域で応用されています。
これらの技術基盤は、AIエージェントの知能を形成する上で不可欠な要素であり、それぞれがAIエージェントの異なる能力を引き出します。次に、これらの技術が現実世界でどのように応用されているのか、いくつかの具体例を通じて見ていきましょう。
AIエージェントは現代社会のさまざまな側面で応用されており、人々の生活を豊かにし、ビジネスの効率化を促進しています。以下は、AIエージェントが特に影響を与えている分野のいくつかです。
多くの企業では、顧客からの問い合わせに対応するためにチャットボットが導入されています。これらのAIエージェントは、顧客の質問に即座に回答することができ、24時間体制でサービスを提供します。また、より複雑な問題については、適切な人間のオペレーターにエスカレーションすることも可能です。これにより、顧客満足度の向上とオペレーションコストの削減が実現されています。
AIエージェントは、医療分野でも重要な役割を果たしています。例えば、患者の症状から最も可能性の高い疾患を診断したり、医師の診断をサポートするためのデータ分析を行ったりします。また、患者の健康管理や治療計画の策定に役立つ情報を提供するアプリケーションも登場しています。
金融業界では、AIエージェントが投資の決定支援やリスク管理、顧客サービスの向上などに利用されています。ロボアドバイザーは、ユーザーの投資目標やリスク許容度に基づいて、最適なポートフォリオを提案します。また、フロード検出システムは、不正な取引をリアルタイムで特定し、金融犯罪の防止に貢献しています。
映画や音楽、ゲームなどのエンターテインメント分野でも、AIエージェントがクリエイティブなプロセスを支援しています。映画の編集から音楽の作曲、ゲーム内の非プレイヤーキャラクター(NPC)の行動パターンの生成まで、AIは創造的な活動を新たなレベルに引き上げています。また、個々のユーザーの好みに合わせてコンテンツを推薦するシステムも、AI技術によって可能になっています。
これらの例は、AIエージェントが私たちの生活や仕事にどのように統合され、有用なツールとして機能しているかを示しています。しかし、これらの進歩には、プライバシーの保護、倫理的な判断、技術の透明性など、解決すべき課題も伴います。次に、AIエージェントの未来と直面している課題について考察します。
AIエージェントの技術は日々進化を遂げており、その応用範囲も広がり続けています。しかし、これらの技術の発展は、倫理的、社会的な課題を引き起こす可能性もあります。以下に、AIエージェントの未来に対する展望と共に、直面している課題について述べます。
AIエージェントは、私たちの生活や社会に多大な影響を与える技術であり、その可能性は計り知れません。未来に向けては、技術的な進歩と共に、倫理的、社会的な課題への対応が不可欠です。AIエージェントの発展を通じて、より良い未来を築くためには、多様なステークホルダーが協力し、包括的なアプローチを取ることが重要です。技術の力を倫理的に利用し、すべての人々にとっての利益を最大化することが、私たちの共通の目標であるべきです。
AIエージェントに関するこの探究は、技術の現在と未来の可能性、そしてそれが私たちの世界とどのように関わっていくかについての一瞥を提供しました。引き続き、この興味深い分野の発展に注目していくことをお勧めします。
AIエージェントの進化は、私たちの生活に新たな便利さをもたらし、ビジネスの運営方法を根本から変える可能性を秘めています。しかし、その一方で、プライバシー、セキュリティ、倫理的な問題など、多くの課題にも直面しています。技術の進歩を正しく理解し、それを利用する上での責任について考えることが、これからの社会に求められる重要な姿勢です。
AIに関するさらなる理解を深めたい場合は、以下のリソースが役立つでしょう。
AI技術は、私たちの未来を形作る重要な要素です。この技術を理解し、適切に活用することで、より良い社会の実現に貢献できるでしょう。引き続き、AIとその可能性について探求し、学び続けることが重要です。
]]>インベントリファイルで何に対して自動化を行うのか対象を定義できます。定義ファイルのデフォルトを設定することもできます。一度設定すると、今後コマンドを打たずして、省略してInventoryファイルを利用できます。
[defaults]
log_path = $HOME/.ansible/ansible.log
host_key_checking = False
retry_files_enabled = False
inventory = $HOME/inventory.ini
playbookは大きく4つのセクションで、基本はTargetsセクションとTasksセクションのみ記述が必須です。
非常にシンプルな構成でわかりやすいですね。
・Targetsセクション:対象が何か明記します。jinja2ファイルを挟み動的に対象を指定することもできます。
・Tasksセクション:何をするか明記します。
・Varsセクション:変数を定義します。
・Handlersセクション:Tasksセクションで実行がうまく行った時のみ実行します。TasksのNameと合わせて名前をつける必要があります。
---
- name: name
vars:[変数]
tasks:[何をするか]
targets:[対象]
handlers:[タスクが成功した場合に実行]
<Fileモジュール> ディレクトリやファイルを作れます。
<templateモジュール> ファイルをコピーするモジュールです。
内部で変数を使うことができ、動的な動きができます。
Copyモジュールもありますが、動的なファイルコピーができるtemplateを使いこなした方が便利です。
Jinja2テンプレートファイルを作成する必要があります。
- name: Template a file, using symbolic modes (equivalent to 0644)
template:
src: group_sudoers.j2
dest: /etc/sudoers.d/user01
owner: root
group: root
mode: 0400
validate: 'visudo -cf %s'
<block> タスクをまとめることができます。ルート権限でこのタスクをやりますと言うときに、便利です。
ansible -b -m authorized_key
ansibleコマンドで試せる。
-m authorized_key:ssh-keyの配布をやってくれる。
roleを使うことでtasksを機能ごとにまとめられます。パーツをグループ化していくことで、自動化を管理してパーツを組み合わせて使えます。構成ファイルはansible-galaxyコマンドで一括で作成することができます。
ansible-galaxy init --init-path=roles common
コマンドを実行すると以下のようなディレクトリが作成されます。テンプレートとなるこの構成を理解することで、Ansibleの基本構成でコマンドを管理しやすくなります。
roles
`-- common
|-- README.md
|-- defaults
| `-- main.yml
|-- files
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- tasks
| `-- main.yml
|-- templates
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
基本的な3階層モデルのWebサーバを自動化する場合は以下のようにcommon,application,mariadb,nginxのようにディレクトリを作成します。共通ディレクトリでサーバレベルのことを行い、上位レベルのプロセスのインストールをapplication,mariadb,nginxのディレクトリで定義することで、IPアドレスやパラメタータレベルのものを修正するのみで、3層モデルのウェブサーバを構築することができるようになります。
roles
|-- application
| |-- README.md
| |-- defaults
| | `-- main.yml
| |-- files
| |-- handlers
| | `-- main.yml
| |-- meta
| | `-- main.yml
| |-- tasks
| | `-- main.yml
| |-- templates
| |-- tests
| | |-- inventory
| | `-- test.yml
| `-- vars
| `-- main.yml
|-- common
| |-- README.md
| |-- defaults
| | `-- main.yml
| |-- files
| |-- handlers
| | `-- main.yml
| |-- meta
| | `-- main.yml
| |-- tasks
| | `-- main.yml
| |-- templates
| | `-- hosts.j2
| |-- tests
| | |-- inventory
| | `-- test.yml
| `-- vars
| `-- main.yml
|-- mariadb
| |-- README.md
| |-- defaults
| | `-- main.yml
| |-- files
| |-- handlers
| | `-- main.yml
| |-- meta
| | `-- main.yml
| |-- tasks
| | `-- main.yml
| |-- templates
| |-- tests
| | |-- inventory
| | `-- test.yml
| `-- vars
| `-- main.yml
`-- nginx
|-- README.md
|-- defaults
| `-- main.yml
|-- files
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- tasks
| `-- main.yml
|-- templates
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
自動化するAnsibleのファイルを構成管理する方法をご紹介しました。一度、自動化できるファイルを作成しておくと使いまわすことができて便利です。一時的なイベントサイトの構築や検証環境構築に役立たせることができると思います。是非、お試しください。
]]>WordPressのメニュー項目に言語設定する項目を選ぶと日本語か英語かその他の言語化を選べるようにすることです。やりたいことはシンプルですが、Bogoの標準機能ではないです。
Bogoのインストール方法はこちらの記事でご紹介しています。
併せてお読みください。
外観からメニューを選択します。
メニューを選択すると固定ページやカスタムリンクを追加することがわかります。
カスタムリンクでLanguageと、Languageを親にもつJapaneseとEnglishを作成します。
作成するときにメニューの構成を作れますので、Languageの下にJapaneseで日本語トップページのURLを記載し、Englishで英語のトップページのURLを記載します。これで、メニューにLanguage項目ができてJapanese/Englishを選択することができるようになります。
MenuにLanguage項目を作成して、多言語化サイトを実現する方法を紹介しました。ページの人枠を使って言語設定をできるようにするのは、冗長な情報だと思いこの手法をとることにしました。
よろしければTwitterフォローしてください。
]]>無料でWordpressを多言語化することのできるプラグインです。自身の場合は英語のページをサブディレクトリ型の形式で作成できれば十分で、このプラグインが適していました。個人でWebを公開している方は複数サイトを運営するのは労力がかかり、力が分散してしまうので1つのサイトを育てることを考えるとサブディレクトリ型で作成できると良いです。できれば同一Wordpressの管理下で作業できると良いと思いました。結果、Bogoは素晴らしいプラグインだと思いました。また、多言語サイトを1つずつ手動で作成でき、アイキャッチ画像やOGP画像を個別に作成することができます。自身の場合は1週間に1ページ作ることを目標にしており、多言語化することで1週間に数ページを予約投稿してアップしていくこともできるようになります。
ダウンロードしてプラグインを有効化すると、ダッシュボードの左側のタブにLanguagesが表示されます。Installed Languagesを選択します。
利用可能な言語をInstallします。120カ国語以上あり驚きです。
インストールすると、投稿ページや固定ページの記事を作成する画面で、文書タブに「言語」の項目が表示されます。英語のページを作るとき、英語を選択して「翻訳を追加」ボタンをクリックします。
英語(アメリカ)ページが作成されました。このページは公開すると、「ドメイン名/en/blog/[パーマリンク]」というURLに保存されます。
以降、多言語のページを修正するときは、同一の記事の編集ページから各言語を選択して、各言語のページごとに修正することになります。まずはGoogle翻訳を使って、効率的に翻訳してみます。
Bogoでは1ページずつ自分自身で英訳したページを作成する必要があります。個人でサイトを公開している方はできる限り無料で、効率的に翻訳をしたいと思います。そこで、Chromeの拡張機能であるGoogle翻訳を利用して、コピー&ペーストで簡単に英語訳のWebページを作成する方法をご紹介します。Google翻訳のAPIを使うと自動で翻訳記事を作成する方法もありますが、使い過ぎると料金がかかってしまいます。また、アイキャッチ画像等は別に作成すると思いますので、1言語ずつページを作ります。
この方法はプレビュー画面でも翻訳できますので、公開前の記事でも活用できます。
Google翻訳を使う上で、翻訳ページに日本語をコピペして、英訳をコピペするのは少し作業が多いです。そこで、Webページを丸ごと翻訳をかけてしまい、コピペを測ります。効率的ですよね。
まずは、Chrome拡張機能をインストールします。
右上のパズルのようなボタンを押して、Chromeの拡張機能を使ってみます。
「このページを翻訳」とありますので、翻訳したい自身のサイトでこのリンクをクリックします。
公開まであれば、プレビュー画面になります。
多くの言語を選択できますね。今回は英語を選択しました。
英語のページが表示されます。タイトルから終わりにまでのコピーしたい部分を全て選択してコピーし、Wordpressの編集中の画面に貼り付けます。
画像のサイズやコピペが上手くいかなかった点を修正して整えたら英語ページが完成です。
Chrome拡張機能とBogoを使ってWordpressを多言語化する方法、Google翻訳をうまく使い効率的に翻訳する方法をご紹介しました。日本語には日本をスコープとする制約がありますので、是非世界に向けて記事を発信するきっかけとしていただけたらと思います。日本の人口は右肩下がりですが、世界では人口は右上がりです。インターネットユーザも間違いなく世界では右肩上がりですので、是非お試しください。
よろしければTwitterフォローしてください。
]]>AWSでは、AWSの認証局で無料でSSL証明書を発行できます。また、自動で更新されます。通常のLinuxサーバでは、無料でSSL証明書を使う場合はLet’s Encryptを利用できます。興味がある方は以下の記事もお読みください。
AWSでは、AWS Certificate Manager (ACM)を使用することで、無料で証明書を取得できます。
AWS Certificate Managerは、インターネット上で信頼されるSSL/TLS証明書を簡単に取得、管理、および使用できるサービスです。ACMでは、自己署名証明書の作成から、公的なCAからの署名まで、様々なタイプの証明書を取得することができます。
特にAWSではAWS Certificate Manager (ACM) の Public Certificates を使用することで、無料で証明書を取得することができます。 Public Certificatesでは、Domain Validation(DV) SSL/TLS証明書を自動的に発行、管理し、公的なCAからの署名を受けることで、ドメインの所有者が証明されます。
Certificate Managerへアクセスします。
AWSの署名付き証明書を取得するため、リクエストを送ります。
ドメインの正当性が証明されるまで証明書は発行されません。
パブリック証明書をリクエストします。完全修飾ドメイン名には利用予定のドメインを記載します。今回の場合はお名前.comで利用しているドメインです。その他はデフォルトのままリクエストをクリックします。
リクエスト後に証明書の状況をみると、ステータスが保留でCNAME名、CNAME値が記載されています。ドメインを持っていることを証明するために、この情報をお名前.comでcnameのレコードとして登録し、保有していることを証明します。証明が完了すると「成功」と表示されます。
お名前.comでcnameを設定して、AWSにドメインを保有していることを証明します。
DNSでCNAMEの設定を行います。
CNAMEレコードとは、別名に正式名を紐づけることができる仕組みです。この仕組みを使って証明書を保有していることを示すとは面白いですね。
お名前.comにアクセスして、ドメインタブから「ドメインのDNS設定」をクリックします。
DNSレコード設定を利用するの「設定する」ボタンをクリックします。
CNAMEレコードの追加をします。TYPEの「CNAME」を選択して、ホスト名に「CNAME名」を記載し、VALUEには「CNAME値」を記載します。追加ボタンをクリックして、確認して設定します。
登録が完了して暫くしたら、AWS側のリクエストが完了して、証明書が発行されます。
作成した証明書をCloud Frontに設定します。
ディストリビューションを作成して、公開したWebサーバの情報があるオリジンドメインを選択します。
お名前.comのドメインを使うため代替ドメイン名(CNAME)を設定します。証明書と同じ名前にします。
SSL証明書を選択します。リクエストして作成された証明書を使うことができます。
Cloud Frontでウェブサーバを公開できているはずですので、数分待ってからディストリビューションドメイン名をコピーして、ブラウザの別タブのURLでアクセスできれば成功です。
お名前.comのドメインを使い、SSL証明書を利用してWEBサイトをSSL化する方法をご紹介しました。証明書は無料で、自動更新もできます。さらに、Cloud Frontを使うことでAWS Shieldによるセキュリティの向上、CDNによる高速化もできました。
よろしければTwitterフォローしてください。
]]>WordPressを立ち上げ後に接続しようとすると、「データベース接続エラー」が発生します。この画面だけではわからないと思いますが、原因はWordpressではよくありがちなエラーなようで、wp-config.phpにlocalhostの記載があることです。そのため、wp-config.phpのlocalhostを127.0.0.1に変更すると接続できます。
wp-config.phpの設定を変えるには、xfreeではftp接続が可能です。ftp接続してwp-config.phpファイルを取得して、中身を修正してwp-config.phpを上書きします。まず、設定画面からFTPの接続を有効にします。
「FTPアカウント設定」ボタンをクリックします。
FTPアカウント設定の「設定変更」ボタンをクリックします。
「全てのファイル・フォルダにアクセスする」にチェックを入れます。チェックを入れることでwp-config.phpがあるフォルダへアクセスできるようになります。
「設定変更(確認)」ボタンをクリックします。
「設定編集(確定)」ボタンをクリックすると、FTPのアカウントIDとパスワードが取得できます。控えておきます。
自身の端末はMACで、FileZillaを使います。MACのFTPクライアントはFIleZillaが使いやすくておすすめです。
Windowsではwinscpをダウンロードして使うと良いでしょう。人気のあるFTPクライアントソフトウェアです。
FileZillaを開いて、赤枠のボタンをクリックして新規接続をします。
ホスト名にはFTPホスト名、ユーザ名にはFTPアカウント名、パスワードには先程控えたパスワードを入力します。また、xfreeは暗号化に対応していないようで、「平文のFTPのみを使用する」を選択します。暗号化されていない通信になるため、公共のWi-Fiなどのリスクの高い環境ではこの作業はやらない方が良いでしょう。
接続ボタンをクリックすると接続できます。wp-config.phpは「/」ディレクトリにあるので「/」を選択します。
wp-config.phpが見つかるはずです。見つかりましたらローカルにコピーします。
メモ帳やVIでwp-config.phpファイルを開きます。38行目にlocalhostの記述があります。コメントアウトは文字化けしていますが、気にせず修正しました。
以下の通り、localhostを127.0.0.1に修正します。
define( 'DB_HOST', '127.0.0.1' );
FTPクライアントで、修正後のwp-config.phpを送信して上書きすれば修正完了です。
再度アクセスすると、Wordpressのログイン画面に到達できます。データベース接続エラーは解決できました。
xfreeのwordpressのデータベース接続エラーを回避する方法をご紹介しました。また、macのftpクライアントソフトウェアの使い方もご紹介しました。xfreeでは無料でwordpressを利用できるサービスが提供されています。興味がある方は是非試してみてください。
よろしければTwitterフォローしてください。
]]>「https://learning-english.algo-ai.work/category/grammar/index.html」ファイルを見てほしいときに「https://learning-english.algo-ai.work/category/grammar/」で自動でindex.htmlファイルを見てほしかったです。Wordpressではデフォルトで各パーマリンクのディレクトリにIndex.htmlが配置されるため、静的化した後にindex.htmlと記載していくことはやりたくないため、方法を探しました。
CloudFrontではディストリビューション以外に、関数が選択できます。タブから関数を選択して、自動でindex.htmlを意記述してくれるプログラムを書くことにしました。
関数の作成を進めて、開発タブに以下のようなコードを記載します。
function handler(event) {
var request = event.request
var uri = request.uri;
if (uri.endsWith('/')) {
request.uri += 'index.html';
} else if (!uri.includes('.')) {
request.uri += '/index.html';
}
return request;
}
関数を発行して関連づけを追加をクリックして、index.htmlを自動で付与したいディストリビューションを選択します。
以上で設定は終わりになりますので、「ディストリビューションドメイン名」へアクセスすると自動でindex.htmlが必要なサイトにアクセスできるようになります。
Cloud FrontでWebサーバを公開するときにハマった点をご紹介しました。Wordpressを静的化してCloud Front + S3 で爆速なWebサイト公開方法をご紹介しています。よろしければ併せてお読みください。
よろしければTwitterフォローしてください。
]]>・AWSでEC2を立てる
・Squidサーバを構築して多段プロキシする設定を入れる
まずはプロキシサーバを立てるサーバをAWS上に用意します。
AWS上でサクッと作ります。
慣れると30分もかけずにEC2サーバを構築できますが、初めは少しつまづくこともあると思うので、簡単にポイントを記載します。サーバを構築する前に、バーチャルプライベートクラウドやグローバルIPを振るためのインターネットゲートウェイ、ルーティングテーブルを、事前に作成しておく必要があります。ゾーンを作ったりルータの設定をする感覚です。
ポイント1:VPC(バーチャルプライベートクラウド)を構築する。
ポイント2:インターネットゲートウェイを作成する。
ポイント3:ルートテーブルを構築する。
ポイント4:EC2インスタンスでCent OSを起動する。無償枠内のt2.microで十分試せます。
ネットワーク設定でパブリック IP の自動割り当ての有効化を忘れないようにしましょう。
セキュリティグループは、sshトラフィックを許可します。
自端末からssh.keyを-iオプションで指定して、sshで接続します。
接続できればOKで、自身はスマフォで試して30分もかからずアクセスできました。
ssh -i xxx.pem ec2-user@x.x.x.x
Cent OSでsquidをインストールします。
# yum -y install squid
squidの設定変更を行い多段プロキシ設定をします。
「/etc/squid/squid.conf」の設定にnever_directの設定を入れて、決して直接アクセスしないように設定を追加します。加えて、cache_peerで親となるプロキシサーバを示すFQDNの設定を入れます。[FQDN] 部分にはプロキシサービスを提供するSaaSのサーバを示すドメイン名を記載します。
never_directを入れないと、親のプロキシサーバを経由せずに直接アクセスしてしまうこともあるため、never_directの設定も入れるようにしましょう。
never_direct allow all
cache_peer [FQDN] parent 8080 0 no-query
一方で、always_direct allow allと入れると、親のプロキシサーバを経由せず、いつも直接Webサーバへアクセスするようになります。ACLで使い分けると、一部の通信は多段プロキシにせず、一部の通信は多段プロキシに設定するといったことができるでしょう。
簡単にですが、AWS上でEC2を構築し、SaaSプロキシを含む、多段プロキシ構成をSquidで実装する方法をご紹介いたしました。
SaaSを利用して多段プロキシ設定をしたいときはお試ししてみてください。
次世代画像フォーマットは非常に軽く、アクセス速度が速くなるためです。 数百KBのファイルが、数十KBのファイルに変わりレスポンスが早くなります。ストレージ容量の効率化、アクセス速度の高速化が期待できるため、自身は次世代画像フォーマットは積極的に使います。
WordPressよりConvert for Mediaプラグインの検索を行いインストールし、プラグインを有効化ます。
有効化するとメディアタグにConvert for Mediaの欄が増えますので、こちらをクリックして設定できます。
NGINXでは追加設定が必要になります。以下の設定を/etc/nginx/conf.d/default.confなどの、NGINXの設定ファイルに設定をしましょう。
# BEGIN Converter for Media
set $ext_avif ".avif";
if ($http_accept !~* "image/avif") {
set $ext_avif "";
}
set $ext_webp ".webp";
if ($http_accept !~* "image/webp") {
set $ext_webp "";
}
location ~ /wp-content/(?<path>.+)\.(?<ext>jpe?g|png|gif|webp)$ {
add_header Vary Accept;
expires 365d;
try_files
/wp-content/uploads-webpc/$path.$ext$ext_avif
/wp-content/uploads-webpc/$path.$ext$ext_webp
$uri =404;
}
# END Converter for Media
NGINXを再起動して設定を有効化すれば完了です。
systemctl restart nginx
デフォルトの設定を確認します。
WebPがチェックされています。
uploadsが選択されていることを確認します。画像がアップロードされているフォルダです。
Start Bulk Optimizationをクリックして実行します。WebP画像へのコンバートが走ります。画像枚数制限がないの優秀ですね。
デフォルトの設定では元のファイルは削除されません。NGINXで設定した内容を削除してリスタートすれば、元の状態に戻せます。
失敗しても焦らず修正しましょう。
恐らく、NGINXのパスが異なると思いますので、正しいパスに書き換えて実行すると動作すると思います。
NGINXでConvert for Mediaを使って、WebP化する方法をご紹介しました。画像サイズを縮小し、レスポンスが速くなることが期待できますので、是非お試しください。
よろしければTwitterフォローしてください。
]]>grep [検索したい文字列] -rl [検索対象フォルダのパス]
find . -name [探したいファイル名] | xargs grep [本文]
find . -name '[特定の一括ファイル名(*.html)]' | xargs sed -i -e '/[削除したい行が含む文字]/d'
find . -name '*.html' | xargs sed -i '' 's/[置換前の文字]/[置換後の文字]/g'
sleep 300;systemctl restart nginx &
60分以内に更新されたhtmlファイルを表示
find /var/www/ -name '*.html' -mmin -60
diff -rq [ディレクトリ1] [ディレクトリ2]
Linuxのコマンドを忘れてしまなわいように備忘録で登録しました。今後も更新していきます。
よろしければTwitterフォローしてください。
]]>自身の場合は、Bogoをダウンロードしようとしたときに、「WordPressを更新してください」と表示されました。使用中のWPバージョンと非互換であり、まずはWordPressの更新を考えると思います。一方で、WordPressの更新をしたくない場合、バージョンが合わないため、このプラグインを導入することを諦めてしまうかもしれません。諦めなくても、今のWordPressと互換性のあるものを導入することができます。
古いバージョンのプラグインをダウンロードし、現WordPressのバージョンにマッチするものをダウンロードします。古いバージョンのプラグインに辿り着くための遷移方法をご紹介します。
「WordPress.org プラグインページ」をクリックします。
「開発」タブをクリックします。
「詳細を表示」をクリックします。
開発バージョンを指定して、ダウンロードできます。
複数のバージョンのプラグインをダウンロードして、インストールして対応しているかを試していきます。
プラグインの新規追加より「プラグインのアップロード」をクリックして、ダウンロードしたプラグインをアップロードして有効化し、利用できるプラグインを探していきましょう。
最終的に動くバージョンのプラグインを見つけることができれば、プラグインのバージョンをWordPressのバージョンに合わせることで使うことができました。
プラグインのバージョンを落としているため、セキュリティ上最新のものより劣化したものを使うことになることは気をとめておいた方が良いでしょう。この状況を回避する対策は、WordPressの動的サイト自体は公開せずに、静的化したサイトを公開することでセキュリティを強化することができます。
こちらの記事にてご紹介していますの是非お読みください。
WordPressをアップグレードせずに現Wordpressのバージョンに未対応のプラグインを導入する方法をご紹介しました。WordPressをプラグインに合わせるのではなく、プラグインをWordPressのバージョンに合わるアプローチで、使いたいプラグインを使うことができます。また、プラグインのバージョンダウンによるセキュリティの低下に対して、動的なWordPressは公開せず、静的化したページのみを公開することでセキュリティが低下するデメリットを回避する方法も別記事にて公開しております。
よろしければTwitterフォローしてください。
]]>ansibleをAWS上で試します。
Cent OS7のAMIを選択して作成しました。
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)
sudo su
useradd -s /bin/bash -m ansible
passwd ansible
echo "ansible ALL=(ALL) NOPASSWD:ALL" |tee -a /etc/sudoers.d/ansible
sudo su ansible
仮想実行環境を作成します。
sudo localectl set-locale LANG=ja_JP.utf8
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python-devel
sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
sudo yum install -y python
su - ansible
cd
pip3 install virtualenv --user
virtualenv venv
source ~/venv/bin/activate
pip3 install ansible
仮想実行環境に再接続するときは再度以下を実行しますので、忘れないようにしましょう。
su - ansible
cd
source ./venv/bin/activate
コマンドを打ってみてヘルプの内容が表示されれば環境構築成功です。
ansible-playbook --help
ansible --help
ansibleのコマンドを試します。
簡単なコマンドとして、localhostに対してsetupモジュールを実行します。
setupは機器の情報を取得するモジュールです。自分自身の情報を取得するというコマンドです。
多くの情報を取得できます。
ansible localhost -m setup
もし上手くいかなければ、localhostにsshで接続できないことが考えられます。
sshでlocalhostに接続できていることが必須です。
ssh localhost
ansibleでshellコマンドを打つにはcommandモジュールを使います。
shellコマンドは任意のコマンドで使えます。venvディレクトリがあることが確認できますね。
ansible localhost -m command -a "ls"
localhost | CHANGED | rc=0 >>
venv
対象はIPアドレスでも記載できます。
ansible 127.0.0.1 -m command -a "ls"
127.0.0.1 | CHANGED | rc=0 >>
venv
setup, commandモジュール以外にも様々なモジュールがあります。
モジュールを把握することで、ansibleで何ができるかがわかります。
気になる公式ドキュメントのページを検索するのが良いです。
全てのモジュールが一覧で掲載されているページで、ブラウザの検索機能で検索して詳細を確認しましょう。
入門として、良く使うモジュールをご紹介します。
<yumモジュール>
yumはstateパラメータでpresent(install)等を指定できます。
stateはabcent,installed,latest,present,removedがあります。
presentとするとインストールできます。
pythonのインストールを実行し、既ににインストールされているため、changedはfalseとなっていますね。
ansible localhost -m yum -a "state=present name=python"
localhost | SUCCESS => {
"ansible_facts": {
"pkg_mgr": "yum"
},
"changed": false,
"msg": "",
"rc": 0,
"results": [
"python-2.7.5-92.el7_9.x86_64 providing python is already installed"
]
}
<debugモジュール>
debugモジュールはdebug表示ができます。
ansible localhost -m debug -a "var=groups"
localhost | SUCCESS => {
"groups": {
"all": [],
"ungrouped": []
}
}
何に何をするかでいう、何にをまとめて定義することができます。
inventoryファイルでは操作対象をまとめてグループ化して定義することができます。
web_serversにlocalhostを入れて、localhostをグループ指定する形に変更してみます。
db_serversでは、192.168.11.1~192.168.11.5までの5台のサーバをグループ化しています。
<inventory.ini>
[web_servers]
localhost
[db_servers]
db-1 ansible_host=192.168.11.[1:5]
コマンドは-i オプションをつけて、インベントリファイルを指定します。同様のことができます。
ansible -i inventory.ini web_servers -m setup
以下のコマンドはべきとう性が担保されないコマンドです。使う場合は条件分岐を入れた上で、動作確認をしっかりする必要があります。べきとう性とは、ある操作を複数回やっても同じ結果になる性質です。べきとう性はAnsibleの強みの1つであり、失わないようにplaybookを作っていく必要があります。シンプルにするためにも既にあるモジュールを使いこなすことや、モジュールの使い方にも注意して使っていきましょう。
command
expect
psexec
raw
script
shell
telnet
AWSでansibleの環境を構築して、シンプルなansibleコマンドを試しました。playbookを使い複数機器を操作することについても、今後記事にしていき勉強していきたいと思います。べきとう性を失わないように自動化を行なっていくことや、ansibleの癖も掴んでいきたいと思います。
]]>StaaticはWordpressを静的化サイトにするプラグインです。静的化プラグインは複数候補がありますが、自信はこのプラグインでしか静的化が成功しませんでした。
WordPressの「プラグインを追加」よりStaaticをインストールします。検索してインストールボタンを押してインストールできます。有効ボタンを押して有効にします。
メニューの一番下の方にタブができますのでSettingで設定します。
別ドメインへの移行をしました。URLは使いたいドメインを記述します。
Publicationsより「Publish now」をクリックすると静的化できます。
ただ、残念ながらxfreeではhttpsの環境では動作しませんでした。
xfreeでは、httpsでは上手く動作しなかったため、httpに設定変更を行うと上手くいきました。
SSL設定を無効化して、Publish Nowを押すと上手くいきます。
パーマリンクの設定によっては正常に動作しないことがあります。
設定タブよりパーマリンクをクリックして、対応しているパーマリンクの形式にします。
自身は「投稿名」を選択して上手くいきました。/sample-post/のような記事名のフォルダにindex.htmlが置かれるフォルダ構成になります。
S3 で公開する方法はこちらで紹介しています。
さらにSSL化する場合は、各フォルダのindex.htmlへアクセスしてくれないことに引っ掛かりました。Cloud FrontではFunctionを使って、リダイレクトさせると上手くいきます。別記事にてご紹介します。
WordPressのページをStaaticで静的化する方法をご紹介しました。S3 + Cloud Frontで公開するのがコスパが良いと思い、静的化してWeb公開をしています。記事を書くWebサーバのスペックが不要になる点がいいですね。
S3でWeb公開する方法も別記事で紹介していますので、よろしければ併せてお読みください。
よろしければTwitterフォローしてください。
]]>条件分岐はwhenで指定することができます。以下の場合、ansible_os_familyがRedHatである場合にcat /etc/redhat-releaseを実行する例になります。
---
- name: Test Playbook
hosts: test_servers
tasks:
- name: Check OS Family
debug:
var: ansible_os_family
- name: Check OS Version
command: cat /etc/redhat-release
when: ansible_os_family == "RedHat"
簡単ですが、Ansibleの条件分岐を試しました。whenで条件分岐して、コマンドを実行させることができます。
]]>Ansibleは、オープンソースのオーケストレーションおよびコンフィギュレーションツールです。シンプルなYMLファイルを書くことにより、ネットワーク、サーバー、クラウドなどさまざまなインフラストラクチャを自動化できます。 今回は、YMLファイルの基本を学び、Ansibleを使用してインフラストラクチャのインフラフレームを自動化する方法をご紹介します。Ansibleのメリットデメリットを考えました。
まず、クラウド利用が進んでいますが、クラウドは従量課金です。
コストは高いため、必要なときにインフラを用意し、不要なときには環境を削除する運用が向いています。
クラウドは高いので、ケースにあった場合に使えると思います。
自身は検証環境を一時的に利用したいケースが多いので、自動構築ができると使いたい時だけサクッと検証環境を作れてメリットがあります。
Ansibleを使いこなして、自動化してクラウドを使い倒しましょう。
一方で、永年無料で利用できるサーバを提供している太っ腹なOracle Cloud Infrastructureもあります。
興味がある方はこの記事も併せてお読みください。
Infrastructure as Codeは手作業で行っていたインフラの構築や変更作業をコードで定義して自動化することです。アプリケーションで実施してきたことを、インフラレイヤでも、コードでインフラリソースを操作することに応用していくことができます。コードでインフラを管理することで、運用コストの削減、品質向上、作業を標準化することによるガバナンスを効かせるメリットがあると思います。
一方で、設計書等がいらなくなるかもしれませんが、バージョン管理やCIツールによりコード自体を管理していくことが必要になります。インフラエンジニアがアプリケーションよりの運用方法を理解することには時間を要しそうですね。
Infrastructure as Codeで自動化することのできる範囲は、Orchestration, Configuration Managemetn , BootStrappingの3つの範囲があります。簡単に、アプリケーション、OS、BIOSというイメージです。各レイヤで自動化をできるツールは、Capistrano/Fabric、CFEngine/Puppet/Chef、AWS/VMware/Dockerなどがあります。複数ツールで守備範囲が異なると複雑化してしまいますので、全部カバーできるツールがいいですよね。
そこで、マルチレイヤーのオーケストレーションが可能なツールとしてAnsibleがあります。Ansibleは3つの全ての範囲を網羅しています。さらに、クライアント側にAgentをインストールする必要があるツールが多いですが、AnsibleはAgentをクライアント側にも入れずに使うことができます。ssh接続できれば自動化を進められるのです。
今回はこのAnsibleについて、ご紹介します。
Ansibleは、インフラストラクチャの自動化用に開発されたオープンソースのオーケストレーションツールおよびコンフィギュレーションツールです。インフラストラクチャを簡単に設定および構成することができるのが特徴です。YML(YAML Markup Language)でplaybookを書くことによって、複数のシステム構成を自動で構築できます。YMLファイルは、インフラストラクチャを自動化するための命令セットです。
YML(YAML Markup Language)は、インフラストラクチャの設定を自動化するための簡潔なマークアップ言語です。YMLファイルを書くための3つの規則に沿って、Ansible playbookを作成することが多いです。
– スペース2つでインデントを作成します。
– コロン(:)を使用してキーワードと値を関連付けます。
– ハイフン(-)を使用して、リストの項目をインデントします。
YAML形式はシンプルであるため、読みやすくて書きやすいため、学習コストが低く、属人化しずらい特徴があります。
具体的な例は以下で、「—」から始まります。
---
- hosts: webservers
remote_user: root
sudo: yes
tasks:
- name: Install software
apt: name={{item}} state=installed
YAMLはシンプルであるため、Ansibleを使うことでシンプルなことによるメリットがあります。
一方で、条件分岐を含む複雑な処理には工夫がいり、複雑化させすぎるとメリットが弱くなると思います。
如何にシンプルな業務に落として、自動化できるかが重要そうですね。
メリット・デメリットは以下があります。
<メリット>
1. 簡単に構成管理を行えます。Ansibleはプログラミングスキルを必要とせず、YAML言語を使用して、Playbooks(プレイブック)を使用してホストやサービスの構成を定義することができます。
2. 複数のプラットフォームのサポートがあります。Ansibleは多くのOS(Linux、UNIX、Windows)とサービス(MySQL、Apache、nginx)をサポートしています。詳細はモジュールのindexを確認すると把握できます。
3. 軽量でスケーラブルです。Ansibleが取り入れるアーキテクチャは、サーバーをすべて管理する必要がなく、かつ高速に動作します。
4. インフラストラクチャをコードで管理できます。Ansibleを使用すると、インフラストラクチャの設定がコードファイルとしてコードになります。これにより、アプリケーションやサーバーをどのように設定させるかが簡単に追跡できます。また、サーバーの構成を統一したり、変更を簡素化したりすることができます。
<デメリット>
1. Ansibleはカスタマイズして柔軟なインフラストラクチャを構築することは向いていないです。シンプルな構成を立てるべきです。
2. 複雑な処理に向いていなく、Ansibleのループ処理は非常に煩雑な構文となるようです。
3. Ansibleを仮想マシンで使用する場合、変数で仮想マシンの環境を定義する必要があります。
シンプルな構成として、Inventoryを定義してPlayboookで何をするかを記述して動かします。
何をどうするかを定義するだけと考えますと、簡単な構想でいいですね。
Inventoryとして、IPアドレスなどのパラメータを記載します。inventory.iniとして定義します。
[web_servers]、[db_servers]など、任意のグループ名にグループ化することができます。
allグループは暗黙で定義され、inventoryファイルに記載のもの全てを指します。
[web_servers]
web-1 ansible_host=192.168.10.1
web-2 ansible_host=192.168.10.2
[db_servers]
db-1 ansible_host=192.168.11.[1:2]
playbookとして、上記インベントリーに対して何をするかを定義します。site.ymlを定義します。
下記の例は、ymlで定義した192.168.10.1/192.168.1.2にyumでhttpdをstartする例です。
- hosts: web_servers
tasks:
- name: Install Apache
yum:
name: httpd
state: started
enabled: yes
何に対して、何をするかを設定しているシンプルなイメージです。
実行はinventoryとymlを指定して実行できます。
ansible-playbook -i invent.ini site.yml
Ansibleではべきとう性が保証されており、複数回実行してもエラーにならずに次のタスクに移ります。
そのため、エラー処理の条件分岐を記載する必要がなく、playbookがシンプルになる特徴があります。
ただし、commandモジュール等、自由度の高いモジュールを使う場合は、べきとう性が保証されず、複数回実行した場合に何度も実施されてしまい、ansibleの利点を1つ使えなくなってしまいます。commandモジュールは便利だとは思いますが、最終手段だと思った方が良さそうですね。
Ansibleの入門として、メリットデメリットをご紹介させていただきました。
Ansibleはシンプルで広範囲に対して利用することができます。
コミュニティ版は無料で使えますので、CLI/GUI版の両方を試していきたいと思います。
・vmdkファイルをS3にアップロードする
・M1 macでaws consoleを利用できるようにする
・vmimportのロールとしてIAMの設定を行う
・S3のvmdkファイルをスナップショットの領域へコンバートする
・スナップショットからイメージを作り自分のAMIを作る
AWSのストレージサービスS3にvmdkをアップロードします。
vmdkは既に手元にあることを前提とします。ESXiでは対象の仮想サーバ上で右クリックしてエクスポートすればvmdkファイルを入手できます。
S3には、Web画面でドラッグ&ドロップでアップロードできますので、GUIで操作できます。
アップロードをクリックし、ファイルを選択してアップロードボタンを押してアップロードします。
「s3://backet/test.vmdk」のような、s3のURIを控えておきます。
コマンドで、S3のURIを指定してスナップショットへ移行するためです。
Macでは、以下のようにterminalに入力し、aws consoleを使えるようにインストールします。
brew install awscli
aws configure
AWS Access Key ID とAWS Secret Access KeyやDefault region nameを設定します。
Access Key IDとSecret Access Keyの入手方法は、AWSのWeb画面にて、IAMの画面でユーザを選択し、認証情報タブで、アクセスキーの作成をクリックすると作成できます。
AWSにvmdkをインポートできるロールを作成します。
trust-policy.jsonファイルを作成し、aws conwoleコマンドでポリシーを作成します。
trust-policy.jsonファイルをviコマンドで作成します。
vi trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "vmie.amazonaws.com" },
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals":{
"sts:Externalid": "vmimport"
}
}
}
]
}
vmimportというロールを作ります。
aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
ポリシーを作り、ロールをアタッチします。
viコマンドでrole-policy.jsonを作成します。
vi role-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::[自身のバケット名]"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::[自身のバケット名]/*"
]
},
{
"Effect": "Allow",
"Action":[
"ec2:ModifySnapshotAttribute",
"ec2:CopySnapshot",
"ec2:RegisterImage",
"ec2:Describe*"
],
"Resource": "*"
}
]
}
AWS Consoleのコマンドでロールにvmimportポリシーに紐づけます。
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
asw consoleコマンドに持たせるjsonファイルを作成します。containers.jsonファイルを作成します。
vi containers.json
{
"Description": "test.vmdk",
"Format": "VMDK",
"UserBucket": {
"S3Bucket": "[自身のバケット名]",
"S3Key": "[指定するファイル名].vmdk"
}
}
containers.jsonを読み込むaws consoleコマンドを実行します。
aws ec2 import-snapshot --description "test.vmdk" --disk-container "file://containers.json"
以下のような実行結果が出ます。
{
"Description": "test.vmdk",
"ImportTaskId": "import-snap-xxxxxxxx",
"SnapshotTaskDetail": {
"Description": "test.vmdk",
"DiskImageSize": 0.0,
"Progress": "0",
"Status": "active",
"StatusMessage": "pending",
"UserBucket": {
"S3Bucket": "[自身のバケット名]",
"S3Key": "[指定するファイル名].vmdk"
}
},
"Tags": []
}
describe-import-snapshot-tasksコマンドで、タスクの進行状況を確認でき、Statusが「completed」になれば成功です。
aws ec2 describe-import-snapshot-tasks --import-task-ids import-snap-xxxxxxxx
{
"ImportSnapshotTasks": [
{
"Description": "test.vmdk",
"ImportTaskId": "import-snap-xxxxxxxx",
"SnapshotTaskDetail": {
"Description": "test.vmdk",
"DiskImageSize": 1069001216.0,
"Format": "VMDK",
"SnapshotId": "snap-xxxxxxxx",
"Status": "completed",
"UserBucket": {
"S3Bucket": "[自身のバケット名]",
"S3Key": "[指定するファイル名].vmdk"
}
},
"Tags": []
}
]
}
スナップショットとして、AWSに取り込めれば、残りはGUI環境で操作して対応できます。
Elastic Block Storeのスナップショットを開くと、登録したスナップショットがあります。
選択して確認しましょう。
[スナップショットからイメージを作成]を選択します。
イメージ名やアーキテクチャを選択して、イメージを作成します。
今回はtestというイメージ名で作成しました。
ここまでで自分のAMIを作成できました。
EC2の起動は通常通りですので、「自分のAMI」より作成したAMIイメージを選択して、インスタンスタイプ等選択して、ご自由にサーバを立てられますね。
この記事では自前のVMDKファイルをスナップショットへコンバートし、自身のAMIイメージを作成してEC2サーバを建てる方法をご紹介しました。これでvmdkファイルをAWS上に移行することも試せます。他の方法でエラーが発生していて上手くいかない方は、是非スナップショットから自身のAMIイメージを作成する方法をお試しください。
]]>Let’s Encryptにて無料で証明書を取得しましょう。
M1 Mac環境での取得方法を紹介します。S3でウェブベージを公開できていることを前提とします。以下の記事でご紹介しています。
certbotをインストールします。
brew install certbot
インストール後は[/opt/homebrew/Cellar/certbot/2.1.0/bin/certbot]にインストールされています。
自身の環境ではbinにリンクが貼られませんでした。リンク貼らずにこのまま使ってみました。
/opt/homebrew/Cellar/certbot/2.1.0/bin/certbot --version
certbot 2.1.0
コマンドは使えるようです。シンボリックリンクを貼らずにこのまま証明書を作ってみます。
learning-english.algo-ai.workの証明書を発行する場合は以下のようなコマンドになります。
/opt/homebrew/Cellar/certbot/2.1.0/bin/certbot certonly --manual -d learning-english.algo-ai.work
打ってみると、「Create a file containing just this data」と表示されるので、認証のためにS3にファイル作って配置し認証します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
And make it available on your web server at this URL:
http://learning-english.com/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxxxxxxx
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
ローカルで「.well-known/acme-challenge」のディレクトリを作り、ファイル内に「xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx」をコピーして貼り付けます。S3に.well-knownごとアップロードしてから[Enter]を押すと承認されて証明書が発行されます。
証明書一式は「/etc/letsencrypt/live/learning-english.algo-ai.work/」に配置されます。
Cloud Frontに証明書一式をAWSコマンドで送付します。
まずはIAMユーザに権限を付与するためのポリシーを作成します。JSONタブで以下を作成し、ビジュアルエディタに戻って、次へ進み続けて「ポリシー作成」ボタンを押します。画面にボタンがない場合は、Web画面の文字を小さくしていくとボタンが見えてくると思います。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:*ServerCertificate",
"iam:*ServerCertificates"
],
"Resource": "*"
}
]
}
ポリシーを作成したらIAMを開きユーザを作成します。
ユーザを追加します。
作成したポリシーでcertificateの権限を与えユーザを作成します。
作成したユーザを選択して、認証情報タブを選択します。
その中で、アクセスキー欄がありますので、アクセスキーの作成をします。
アクセスキーとシークレットアクセスが取得できますので、控えておきましょう。aws consoleにて後ほど使います。
awscliコマンドをm1 macにインストールします。
brew install awscli
aws configureと打つと、Access Key IDやSecret Access Keyを求められますので、先ほど控えていたキーを打ち設定完了です。
aws configure
AWS Access Key ID [****************]:
AWS Secret Access Key [****************]:
Default region name [ap-northeast-1]:
Default output format [json]:
awsコマンドでcertificateをアップロードします。ディレクトリ名は自身のドメイン名に変更して実行してください。
aws iam upload-server-certificate --server-certificate-name learning-english.algo-ai.work-ssl \
--certificate-body file:///etc/letsencrypt/live/test.algo-ai.work/cert.pem \
--private-key file:///etc/letsencrypt/live/test.algo-ai.work/privkey.pem \
--certificate-chain file:///etc/letsencrypt/live/test.algo-ai.work/chain.pem \
--path /cloudfront/
作成した証明書をCloud Frontに設定します。
ディストリビューションを作成して、公開したWebサーバの情報があるオリジンドメインを選択します。
独自ドメインを使うため代替ドメイン名(CNAME)を設定します。
SSL証明書を選択します。先ほどアップロードした証明書があれば成功です。
Cloud Frontでウェブサーバを公開できているはずですので、数分待ってからディストリビューションドメイン名をコピーして、ブラウザの別タブのURLでアクセスできれば成功です。
お名前.comでcnameを設定して、独自ドメインからS3のURLへアクセスできるようにします。
DNSでCNAMEの設定を行います。
CNAMEレコードとは、別名に正式名を紐づけることができる仕組みです。AWSにFQDNでアクセスできている状態ですので、正式名と紐づけて独自ドメインでアクセスできるようにします。
お名前.comにアクセスして、ドメインタブから「ドメインのDNS設定」をクリックします。
DNSレコード設定を利用するの「設定する」ボタンをクリックします。
レコードの追加をします。TYPEの「CNAME」を選択して、ホスト名はサブドメインの任意の名前、VALUEにはAWS CloudFrontのURLを記載します。追加ボタンをクリックして、確認して設定します。
AWSのCloud FrontでLet’s Encryptの証明書を使いSSL化する方法を紹介しました。これでセキュリティも強化され、CDN環境を構築で、爆速なウェブサイトが作れますね。
よろしければTwitterフォローしてください。
]]>Instagramの自動投稿をする方法は、RPAで予約投稿を自動化することです。具体的には、Statusbrewを使い予約投稿をします。無料では予約投稿数の上限は10であり、再投稿も手動で登録が必要です。Chrome拡張機能のUI Vision RPAで自動化を行い、その動作をChrome拡張機能のcrontabで定期的に実行することで自動予約を行います。予約後は編集で投稿内容を修正、もしくは、そのまま下書きを投稿することができます。
自動いいねと自動フォローをする方法も紹介していますので、よろしければ併せてお読みください。
InstagramやFacebookをプロアカウント・ビジネスアカウントにする必要があります。また、Instagram,Facebookを事前に連携させておく必要があります。
Instagramをプロアカウントに切り替えます。
「プロフィールを編集」をクリックします。
「プロアカウントに切り替える」をクリックして、アカウントをプロアカウントに切り替えます。
また、InstagramとFacebookの連携を行い、InstagramからFacebookへの連携を許可する設定と、FacebookからInstagramへ連携を許可する設定をしておきます。
Facebookからは設定でInstagramという項目があり、「アカウントをリンク」をクリックしてリンクできます。
Instagramからは設定で「リンク済のアカウント」という項目から、「ログイン」をクリックしてFacebookとリンクできます。
また、Facebookもビジネスアカウントが必要であり、「ページ」項目から作成をクリックして、ページを作成しておきます。ページを作成していないと、Statusbrewとの連携時に弾かれます。
Statusbrewはソーシャルメディアのためのコンテンツマーケティング管理やリスクマネジメント対策、コメント監視を含めたエンゲージメント管理を一元化し、社内の承認ワークフローの最適化と高機能分析ができるものです。無料版では、予約投稿やカテゴリの定義、プランの定義などができます。また、TwitterやFacebook, Instagramなど、複数のSNSに1つの投稿を一元的に簡単に出すことができます。今回はInstagramの予約投稿をする目的で利用します。
ユーザを作成してログインすると、スペースを作成できます。任意の名前を入力して「作成」をクリックします。
スペースを作成して、作成したスペースを選択するとソーシャルプロファイルを接続できます。
Instagramをクリックします。
自身は「Facebook経由のログイン」をクリックしました。
Instagramの設定でアプリとウェブサイトから、Statusbrewを許可します。
無事に連携できれば成功です。
Statusbrewは使うのに慣れが必要だと思いました。
ログインして、左上のロゴを押すと、トップページにアクセスできます。無料版では、カレンダーとカテゴリー投稿が設定できます。
カレンダーでは予約投稿ができ、カテゴリー投稿ではカレンダーで使う予約パターンを設定できます。このカテゴリー投稿をうまく使うと効率的に予約設定ができます。
カテゴリー投稿は、カテゴリー名をつけ、予約パターンを作ることができます。
例えば、以下のように設定すると、月・水・金の朝6:45に同じ投稿を行えるように設定できるパターンです。パターン化することができ、うまく使えれば効率化できます。
名前はわかりやすい名前にしておくと、予約する時に便利です。
自動化に向けて、直接予約はせずに下書きを作成します。下書きを複製して予約投稿する準備です。
左の紙飛行機のアイコンをクリックして、「下書き」を選択します。
「投稿を作成」をクリックします。
ソーシャルプロファイルやテキストを入力し、Instagramに定期予約したい写真をアップロードします。定期予約であるため、予約後に写真を差し替えることはできます。「下書きを追加」にチェックを入れます。
カテゴリー予約で、作成したカテゴリーを選択します。日時ではなくパターン予約ができるのでいいです。
「下書きを追加」ボタンをクリックして下書きを作成します。
事前準備では、この下書きを複数作成します。一度に予約できるのは、無料版では10件までです。この記事で紹介する方法では、月〜日までを、1つずつカテゴリとして作ると無料で柔軟な全自動予約ができます。自身はそこまでは細かくなるため、とりあえずまとめて作成してみました。週2回程度自動で予約されても十分だと考えた次第です。
自動化にあたっては、Chrome拡張機能のUI Vision RPAとcrontabを使います。Chromeの操作を自動化できるRPAツールとあらかじめスケジューリングした内容で定期実行ができるツールです。
UI Vision RPAで下書きを複製して自動予約を行います。
UI Vision RPAを開き「+Macro」ボタンをクリックして、マクロを新規に作成します。
「Record」ボタンをクリックして、Statusbrewを自動操作してChromeの動作を記録します。
具体的には下書きの画面で、作成した下書きをクリックして「・・・」をクリック、「投稿を複製」を選択します。
画面が切り替わったら投稿までの操作を行い、RPAに覚えさせます。「下書きを追加」のチュックを外し、承認者をアサインの項目で「承認なし」を選択、「予約投稿」をクリックすれば完了です。すぐ投稿されるわけでは無いので、予約投稿を押してテストします。完了したら、UI Vision RPAの「Stop」ボタンを押してRecordを終了します。
UI Vision RPAで操作を記録できました。「Play Macro」を実行して正常に動くか確かめます。正常に動けば再投稿ができるマクロができました。
UI Vision RPAはHTML形式でダウンロードできます。
作成したマクロを右クリックして、「Create autorun HTML」を選択します。
選択するとhtmlファイルをダウンロードできます。今後はこのHTMLファイルを開くだけで、記録したマクロを実行することができます。
定期実行はchrome拡張機能のcrontabで実行します。ここまでで、HTMLファイルを開くだけで下書きを複製して予約投稿ができる状態であり、このHTMLファイルを定期的に開ければ定期実行が実現できます。
Chromeのcrontabを開き、定期実行できるようにスケジューリングを行います。
RPAツールでダウンロードしたhtmlを実行したときにchromeに表示されていたURLを使います。「?direct=1」を追記して設定します。以下の場合は日曜日の0時0分にRPAのhtmlを直接開くようスケジューリングしています。「?direct=1」で直接開くようオプション設定しています。設定がないとうまく動作しません。注意が必要です。
これで定期的に毎週日曜日の0時0分に月・水・金に予約投稿をすることができます。カテゴリをまとめてしまったため、ざっくりとしたスケジューリングとなりましたが、細かく設定すれば、毎日異なる画像を再投稿する自動化も実現できます。RPAを作り込むことで、画像を置き換えることもできるかもしれません。
無料でInstagramの自動予約をすることで自動投稿をする方法をご紹介しました。Instagramの自動投稿は良くないとされていますが、自動予約までであれば問題ないと思います。自動予約を行い、時間があれば基本的には画像を変更し、時間がないときは過去に閲覧数の多かった画像を自動でリポストするように使い方をしては良いのではないかと思います。
よろしければTwitterフォローしてください。
]]>まずはAWSで静的Webホスティングを行いWebページを見ることができるようにします。
AWS_S3でバケットを作成します。バケット名はお名前.comなどで取得した独自ドメインの名前で設定します。
その他の設定は変更せず、一旦バケットを作成します。
作成後、プロパティタグから一番下に静的ウェブサイトホスティングの設定項目があります。編集を押して有効化していきましょう。
index.htmlや404.htmlを設定します。
静的ウェブホスティングができました。外部公開の設定もしましょう。
アクセス許可タブから「パブリックアクセスをすべてブロック」のチェックをはじます。
バケットポリシーの設定も必要です。編集を押して設定しましょう。
対象のS3を外部からGetできるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::learning-english.algo-ai.work/*"
}
]
}
S3でプロパティタグから「バケットウェブサイトエンドポイント」にURLが記載されています。クリックしてアクセスできるか試してみましょう。
まずは、index.htmlのファイルをアップロードしましょう。「Hello,World」と書いただけのhtmlファイルでもOKです。
その後、「パケットウェブサイトエンドポイント」のURLをクリックしてページが見れることを確認します。
お名前.comでcnameを設定して、独自ドメインからS3のURLへアクセスできるようにします。
DNSでCNAMEの設定を行います。
CNAMEレコードとは、別名に正式名を紐づけることができる仕組みです。AWSにFQDNでアクセスできている状態ですので、正式名と紐づけて独自ドメインでアクセスできるようにします。
お名前.comにアクセスして、ドメインタブから「ドメインのDNS設定」をクリックします。
DNSレコード設定を利用するの「設定する」ボタンをクリックします。
レコードの追加をします。TYPEの「CNAME」を選択して、ホスト名はサブドメインの任意の名前、VALUEにはAWS S3のURLを記載します。追加ボタンをクリックして、確認して設定します。
少し時間が経ってから、ブラウザでアクセスしてS3のindex.htmlページが見れれば成功です。
お名前.comの独自ドメインでS3でウェブサーバを公開する方法をご紹介しました。AWSのS3は従量課金で非常にお安いので、是非お試ししてみてください。実際にはCloud Frontと連携してCDNやSSL化を行うと、企業レベルでのウェブサイトができると思います。Cloud Front連携は別記事にてご紹介したいと思います。
よろしければTwitterフォローしてください。
]]>利用するChrome拡張機能は以下の3つです。
自動いいね&フォローをhtmlファイルを開くことで自動実行する方法です。
まずは、3つのChrome拡張機能をインストールします。
「Superpowers for Instagram」は利用しなくても、UI Vision RPAを操作していいねとフォローをできるように作り込むことはできますが、より安定した操作をするためにモジュールとして使える感覚であるため、今回は利用することにしています。RPAの欠点である不安定な動作を少し補うことができます。
Superpowers for Instagramを試します。
Instagramを開きフォロー、もしくは、いいねをしたいタグのページを開きます。
試しに、「https://www.instagram.com/explore/tags/followforfollowback/」を開くと、「Like all」ボタンと「Follow all」ボタンがあります。これをクリックすると直近に投稿した人の投稿に対して、20人分いいねをするか、20人分フォローをできます。
UI Vision RPAはブラウザ操作をRecordして、Play Macroで記憶したレコードを実行できます。
Recordを押して、「Superpowers for Instagram」の「Like all」「Follow all」ボタンのいずれかを押して、ブラウザ操作を記憶します。JSON形式で記憶できます。
次回以降はPlay Macroを押すと実行できる状態になっています。記憶した後は、実行できることを確かめます。自身が試したところ、以下のJSONコードを取得できました。このコードをUI Vision RPAのJSONに記述して、実行することもできます。
{
"Name": "instagram",
"CreationDate": "2023-1-14",
"Commands": [
{
"Command": "open",
"Target": "https://www.instagram.com/explore/tags/followforfollowback/",
"Value": "",
"Description": ""
},
{
"Command": "waitForElementVisible",
"Target": "xpath=/html/body/aside/div[3]",
"Value": "",
"Description": ""
},
{
"Command": "click",
"Target": "xpath=/html/body/aside/div[3]",
"Value": "",
"Targets": [
"xpath=/html/body/aside/div[3]",
"xpath=//aside/div[3]",
"css=body > aside > div.sfi-button.sfi-button--like"
],
"Description": ""
}
]
}
タイムアウトやコマンドの実行間隔などのパラメータは、UI Vision RPAの歯車の設定ボタンを押すと設定できます。もしタイムアウトが発生してうまくいかなければ、タイムアウトの間隔を長くしたりコマンドの実行間隔を長くすると良いでしょう。RPA特有の不安定な動作になってしまいますが、動けば十分だと思います。
プロジェクトの作成している対象を左クリックして「Create autorun HTML」を選択します。HTMLファイルがダウンロードできます。このHTMLをダブルクリックで起動すると、自動でいいねやフォローされるようになります。後は、このファイルを定期的に開くことができれば、定期的な自動いいね・フォローができるようになります。
cronTabを使いこのHTMLファイルを定期的に開きます。1時間に1回実行する例としては、Minuteが40で割り切れる時に実行します。direct=1とすることで直接実行できます。オプションをつけ忘れるとうまく動作しません。注意が必要です。
これで1時間ごとにhtmlファイルが開かれて自動フォロー・自動いいねできれば成功です。
Chrome拡張機能でInstagramの自動フォロー・自動いいねを定期的に実行する方法をご紹介しました。3つのChrome拡張機能を利用して、インスタの自動化を達成できます。RPA操作は安定させるのは難しい方法ですが、汎用的な手法です。いろいろなことに応用ができます。
GPUを無料で利用できるGoogle Colaboratoryを定期実行する方法もご紹介していますので、よろしければ併せてお読みください。
よろしければTwitterフォローしてください。
]]>「AIにカフェっぽい曲」を訪ねて、具体的な英文を教えてもらいました。Slackでopen AIのAPIを使い質問しました。チャットGPTに日本語対応、高速化して対応をしてもらえます。下記の記事でSlackでチャットGPTを使う方法を紹介していますのでよろしければお読みください。
SlackでチャットGPTに確認しました。
和訳すると、以下の通りです。
“カフェのようなトラックは、メローで軽く、優しいと表現することができます。通常、シンプルで繰り返しのあるメロディーを持つ、なだめるようなリラックスした雰囲気の曲です。カフェのような雰囲気を出すには、アコースティックギター、軽いシンセパッド、ビブラフォン、軽いドラムなどの楽器が考えられます。トラックは、あまり忙しく慌ただしくなく、ゆったりとしたチルな感じで、少しグルーブ感がありつつも、それほどでもないものになるでしょう。カフェの雰囲気をほのめかすような、微妙なジャズの要素を含んだビンテージな雰囲気を醸し出すことができるだろう。”
ゆったりとした軽い音楽を具体的に教えてくれました。今回は、この文字をそのままインプットの文字列として、音楽生成します。
text to imageが流行していますが、text to musicが作り出されています。テキストからミュージックを作り出すことができます。mubertでは3つのタグ情報を指定すると音楽を生成することができます。
よろしければお試しください。
Mubert APIを使って、get_track_by_tagsにより文章から3つのタグ情報を決定します。Google Colabでコードが公開されていました。promptにチャットGPTが出力してくれた文字をコピペして実行してみました。
PromptにチャットGPTが出力した文字を入力し実行しました。
カフェっぽい曲のTagsは以下の3つでした。
この3つのタグから音楽を生成しました。durationは60秒です。
チャットGPTでカフェっぽい曲を具体的にし、3のタグ情報に変換して存在しない音楽を生成してみました。音楽を実際に聴く限りは、text to musicはまだ発展途上だと思いますがすごい可能性だと思います。MIDIや歌詞連携を自動化し、NEUTORINOなどと連携して、スムーズにボーカロイドが歌うなど、自動化を発展させると統合的な音楽自動生成環境を作れると思います。これからの音楽自動生成の世界も楽しみですね。
よろしければTwitterフォローしてください。
]]>Diffusion Beeのインストール方法は過去の記事でご紹介しています。カスタムモデルを使う方法までご紹介しています。今回はWAIFUを選択して使います。
WAIFUのckptファイルは以下にあります。
ckptファイルを選択して、ダウンロードします。このckptファイルがAIのモデルになります。WAIFU以外にもたくさんのckptファイルが公開されています。
Diffusion Beを起動して、右上の三本線をクリックしてSettingを選びます。Settingの中でCustom Models欄がありますので、Add New Modelをクリックして、先ほどダウンロードしたckptファイルを選択すれば、簡単にWAIFUを試すことができます。
Generateボタンを押すと、画像が作成できました。
CKPTファイルの一覧です。Stable DiffusionがOSSなため、これだけ民主化されているとすごいですね。数年でAIがどう発展するかが楽しみです。
M1 Macで簡単にWAIFUを使う方法をご紹介しました。テキストを入力してボタンをクリックするだけでWAIFUを使えるので簡単ですね。AI画像集を作成しています。世に存在しない絵を描いています。興味がある方は是非見てください。
よろしければTwitterフォローしてください。
]]>まずはどんなブログ記事を書いたらよいか聞いてみました。人は質問するだけですね。
どんなブログ記事を書いたらよいと思うか聞いてみたところ以下の回答が返ってきました。
「あなたの興味や趣味に応じて、お気に入りのブログ記事を書きましょう。特定のテーマについて詳しく調べて書くのもいいでしょう。プログラミング、美容、旅行、ファッションなど、興味のある分野について書くのもよいでしょう。また、コメントを書いてさらに自分の記事を共有できるようにするのもよいです。ビジネスに関して記事を書くのもいいでしょう。自分の経験を共有したり、知識的な記事を書いてコミュニティに貢献したりすることもできます。」
まだ抽象的なので、AIに具体化させていきましょう。単語のピックアップは人間がやります。
発想はいっぱい出てきていますね。今回は、ファッションについて聞いてみます。
ファッションの具体性を聞いてみると以下の回答が返ってきました。
「おすすめのファッションアイテムや、最新のファッショントレンドについての記事、洋服のコーディネート方法などを中心に書くとよいでしょう。合わせるアクセサリーやインナーウェアなど、色々な細かいことを扱った記事も投稿すると、記事自体やコンテンツのバリエーションが広がって、読者を引きつけられます。」
少し具体的になってきましたね。
では、AIが提案してくれた、洋服のコーディネート方法をアクセサリー、インナーウェアー、バリエーションに注目します。5セクションで1000字以上のブログ記事を書いてもらうようにお願いしてみます。
AIに洋服のコーディネート方法をアクセサリー、インナーウェアー、バリエーションをつけて、ブログ記事を書いてもらいました。以下はAIが書いた記事です。
洋服のコーディネートは着る人の感性で組み合わせるアートである。素材やカラーなど、さまざまなチョイスの中からより自分らしいものを見出すことが重要である。また、インナーウェアやアクセサリーなど、毎日の着こなしのみならず、特別な日の着こなしにおいても使えるものを把握しておくことが大切である。
インナーウェアーは服を着る人の体型や性格によっていくつかのバリエーションがある。例えば夏場はホワイトやブルーなど涼しい色合いのタンクトップやキャミソールがよく、冬場は厚手のセーターなどを着用すると身体を保温したり、アップデートすることができる。さまざまな素材とカラーから選ぶことで、さらに雰囲気を変えることが可能である。
アクセサリーはコーディネートを完成させる大事な要素である。首元から手首までバッグ、サングラス、小物を入れて着こなしをアップデートさせることができる。オリジナリティが求められる昨今は、デザイン性と便利性を兼ね備えたアイテムを活用して、ファッションにブレンドすることも可能である。
トップスからボトムス、コート、ブーツ、バックなど、様々なパーツでが a コーディネートを組み合わせることができる。色、柄、素材といった種類から変化のある組み合わせを考えると、春から秋までの様々なシーズンで同じ服を活用することが可能となる。季節の変わり目をしっかりと考慮して、売れ筋の洋服をバリエーション活用することで、理想のコーディネートを完成させることができる。
洋服のコーディネートにはインナーウェアー、アクセサリー、バリエーションを活用することで完成度の高い装いをすることが可能である。着こなしを印象的に組み上げるためには、トレンドを用いることで自分なりの感性でアートのようなコーディネートを実践することができる。日々の着物選びを楽しむためにも着る人特有のチョイスを活用することで、よりハイクオリティのコーディネートを実現させるのが重要である。
今回はAIでブログ記事を書いてみました。内容はその通りだと共感できることも多く、人が描くのと遜色ないレベルで記事が書けていると思います。この記事を骨に少しブラッシュアップして、画像も足せばファッションの記事をしっかり書けるのではないかと思います。
よろしければTwitterフォローしてください。
]]>チャットGPTは元データから学習をしていて、その情報をもとに回答しています。そのため、日本語と英語でどちらの方が元データの質が高いかが重要になってきていると思います。AIを作っているのは日本の会社ではないことからもわかるよう、英語で質問して英語で解答をもらった方が精度が高くなると考えられますよね?そのため、日本語を英訳して、英訳した文字でチャットGPTに質問し、英語で応答をもらい、その応答を日本語訳することで、精度を高めることができます。翻訳はGoogle翻訳やDeepLが有名ですので、他のアプリを挟む仕組みを作ることで、日本語を使いつつ精度の高いチャットGPTを使うことができます。
OpenAIのAPIを使って、Google Apps ScriptでLINEに対応させることで、日本語に対応したAIを利用することができます。無料で試すことができます。LINEのビジネスアカウントを払い出し、Google Apps Scriptで簡単なスクリプトを記載して、連携して対応させると便利に使えます。LINEで使えるとググる感覚で気軽に使えて便利ですよね。
詳細は以下の記事でご紹介していますので是非お試しください。
加えて、このページのGoogle Apps Scriptで翻訳するをお読みいただき、翻訳APIを追加で利用することで精度の高いチャット機能をお試しできます。
OpenAIのAPIを使って、Google Apps ScriptでSlackに対応させることで、チームで簡単に触ることができるようになり、かつ、日本語でも対応することができます。
Slackに組み込むことができれば、チームで気軽に触ることができて便利ですよね。
詳細は以下の記事でご紹介していますので是非ご確認ください。
加えて、このページのGoogle Apps Scriptで翻訳するをお読みいただき、翻訳APIを追加で利用することで精度の高いチャット機能をお試しできます。
getChatGptMessageは前セクションで作成したスクリプトで関数化されています。
LanguageApp.translateでGoogle翻訳を挟みます。
日本語を英訳して、getChatGptMessageでopenAIのAPIを利用します。
レスポンスをcontentに格納して、和訳してcontentに格納します。
これで英語でAPIを利用することで精度の高いチャットGPTを利用でき、かつ、日本語で対応することができます。
var temp;
temp = LanguageApp.translate(message,"ja","en"); //英訳
var content = getChatGptMessage(temp);
content = LanguageApp.translate(content,"en","ja"); //和訳
チャットGPTを日本語で精度が高い方法で使う方法をご紹介しました。
英語で質問するためには翻訳APIを使うことで精度が上がりますので、普段からチャットGPTを使う方は是非試してみてください。
仕事納めっぽい絵って思いつかなかったので、チャットGPTに仕事納めっぽい絵はどんなものがあるか聞いてみました。
4つも案を挙げてくれました!
・時計を止めるような絵
・パンを焼くような絵
・手を合わせて祈りのポーズ
・旅行したいと思って出かけるいろんな人の姿
思いつきもしない答えが返ってきました。面白いですね。
時計を止めるような絵とは?と思い、
1つ目の時計を止めるような絵を具体的に質問し、併せてDiffusion Stableに書かせる英文を作るよう指示しました。すごい。長い英文が返ってきました。
英文を和訳するとこちらの通りです。
“この絵には、黒いドレスを着た若い女性が、時計台のそばに脚を広げて、地平線を見つめてストイックに立っている姿が描かれています。彼女の顔は決意の仮面であり、両手で時計台の側面を掴んでいる。荒涼とした風景を舞台に、彼女の決意に満ちた視線が闇に包まれるように、片手はゆっくりと時計台の上に伸びていく。彼女の姿勢は、その瞬間だけでなく、より大きな、包括的な物語の中で、彼女が隠喩的に時間を超越した空間にいることを暗示している。彼女は時間の流れに果敢に抵抗し、どのような形であれ、それを食い止めようとしているのです。”
必死に時を止めようとする女性の姿が思い浮かぶ具体的な内容です。
今年を終わらせたくない女性のようですね。興味深い発想。
チャットは、slackでチャットGPTを使っていますので、遊びたい方は是非こちらもご確認ください。
AIの具体的な指示をDiffusion Stableで書かせてみました。
「仕事納めっぽい絵」が「時計を止めるような絵」となり、この世の終わりのような絵ができています。
M1 MACでDiffusion Beeを使って書いてみました。
同じように絵を描きたい方はこちらの記事をどうぞ!
仕事納めっぽいという言葉から、AIがAIを扱う具体的な指示を出すまで、人が少し補助するだけで絵が描けるのは面白いですね。
今後はAIがさらに階層化して、AIがAIを指示して、その指示でAIがAIを操作するような、階層型のAI操作で芸術が生まれるかも知れません。様々なものが出来上がっていく世の中になるのだと思います。
ここ数年はAIの発展に注目ですね。
よろしければTwitterフォローしてください。
]]>Open AIのAPIを使うことで一括で質問の応答を得ることができます。LineやSlackでチャットGPTを使えるようになることで、気軽に速く動かすことができます。そのために、Open AIのAPIキーを取得して、LineやSlackのアプリをGoogle Apps Scriptで便利に使えるようにします。
OpenAIのAPIを使って、Google Apps ScriptでLINEに対応させることで、気軽にかつ一括で返答の回答を受けとれるようになります。無料で実践できます。LINEのビジネスアカウントを払い出し、Google Apps Scriptで簡単なスクリプトを記載して、GASとLINEを連携して対応させると便利に使えます。LINEで使えるとググる感覚で気軽に使えて便利ですよね。
詳細は以下の記事でご紹介していますので是非お読みください。
OpenAIのAPIを使って、Google Apps ScriptでSlackに対応させることで、チームで簡単にチャットGPTを触ることができるようになり、かつ、一括で返答の回答を受けとることができます。
無料で実践することが可能です。Slackに組み込むことができれば、チームで気軽に触ることができて便利ですよね。
詳細は以下の記事でご紹介していますので是非ご確認ください。
エラーや遅いことを可決する以外に、チャットGPTで生産物を出すことを試しています。その1つとして、チャットGPTでブログ記事を描いてみることです。ブログ記事を描いてみた結果をご紹介しております。
チャットGPTで文字から画像を作り出すことのできるDiffusion Stableのインプットになる文字を出力し、Diffusion Stableで実際に画像を作り出すことを試しました。○○っぽいものを具体的に聞いていくことで、具体的な文字を出力し画像を作り出しています。これからはAIとAIを繋ぐことを人が行い、アウトプットを出していけると面白いと思います。興味がある方ほこちらの記事も是非お読みください。
チャットGPTを簡単に触れる記事をご紹介させていただきました。LINEやSlackに組み込み最新のAIのチャットボットを触ることができると、何かと捗りますよね。特にLine対応では英語での話し相手としても使え、AIで英語の勉強もできて便利です。次世代の発展技術となるAIを利用して、時代を先取りしていきましょう。
]]>・OpenAIのAPIキーの取得方法
・Google Apps Script(GAS)のスクリプト
・Slackのappを作る
OpenAIのAPIキーを取得して、サーバ側のスクリプト作成の準備をしましょう。
以下でSign upしてログインします。Google Accountでも登録できます。
ログインして、Create New Seacret Keyをクリックし、API用のキーを取得します。
これでスクリプト作成の準備完了です。
Google Apps Scriptで、サーバレス環境にてサーバを準備します。
以下のURLにてプロジェクトを作成してスクリプトを作成します。
スクリプトの中の[自身のOpenAIのAPIキー]と[自身のSlack IncommingのURL]には、控えた文字列を記載しましょう。SlackのURLは次のセクションで取得方法を説明します。
function doPost(e)
{
// slack appsのEvent Subscriptionsのchallenge。同期する時に利用。
var params = JSON.parse(e.postData.getDataAsString());
if('challenge' in params)
{
return ContentService.createTextOutput(params.challenge);
}
// ユーザ名とtextを取得
var userName = params.event.user;
var textSlack = params.event.text.substr(0, params.event.text.length);
// chatGPTに問い合わせ
var resultStr = getChatGptMessage(textSlack);
var contents = `<@${userName}> ${resultStr}`;
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(
{
"text" : contents,
link_names: 1
}
)
};
// slack連携
UrlFetchApp.fetch("https://hooks.slack.com/services/[自身のSlack IncommingのURL]", options);
}
// ChatGPTのAPIを呼び出し応答を取得する
function getChatGptMessage(message) {
var uri = 'https://api.openai.com/v1/completions';
var headers = {
'Authorization': 'Bearer [自身のOpenAIのAPIキー]',
'Content-type': 'application/json',
'X-Slack-No-Retry': 1
};
var options = {
'muteHttpExceptions' : true,
'headers': headers,
'method': 'POST',
'payload': JSON.stringify({
"model": "text-davinci-003",
"max_tokens" : 2500,
"prompt": message})
};
try {
const response = UrlFetchApp.fetch(uri, options);
var json=JSON.parse(response.getContentText());
return json["choices"][0]["text"];
} catch(e) {
console.log('error');
}
}
スクリプトを作成しましたら、New Deployをクリックして、歯車をクリックしてWeb appを選択しましょう。Who hasではanyoneを選択して、Deployをクリックします。Authorized accessでログインして承認します。
DeployをクリックするとWeb URLができますのでコピーします。
slackにログインして、slack app Directoryへ移動します。
右上のビルドを選択します。
Create an appを選択し、Appを作成していきましょう。
From scratchを選択し、scratchで作っていきます。
App Nameを任意の文字列で記載し、作成したAppを追加するチャンネルを選択します。
Create Appをクリックします。
Incoming Webhooksを選択し、Google Apps Scriptから受け取るためのURLを取得得します。
Activate Incoming Webhooksを「On」にします。
WebhookURLをCopyして、前のセクションで作成したGoogle App Scriptのスクリプトに貼り付けます。
左側のサイドバーよりEvent Subscriptionsを選択します。
SlackからGoogle Apps Script側のサーバへ送信するためのURLを記載します。
challengeを含むparameterで、Google Apps ScriptのPost関数に送信され、チェックが入ります。
Google Apps ScriptとSlackのEvent Subscriptionsの双方で正しく接続できるようになりましたら、slackでチャットGPTが使えます。
チャットGPTをslackでさわれるようにする方法をご紹介しました。
slackを業務で使っている方は、相談役としてチャットGPTを使えるようになり仕事が捗りそうですね。それだけではなく雑談も活発になり、組織力も上がるかも知れません。使ってみてください。
LINEでチャットGPTを使う方法も記事にしています。
興味がある方は併せて読んでくださいね。
・LINE Bussinessのアクセストークン、シークレットトークンの取得方法
・OpenAIのAPIキーの取得方法
・Google Apps Script(GAS)のスクリプト
LIne Bussinessに登録してログインします。
作成をクリックして、新しいBOTを作成します。
同意して、アカウントを作成し、プロバイダを作成します。
チャットをクリックします。Webhookの設定を行います。
チャットタブをクリックして、「Messaging APIの設定画面を開く」をクリックします。
Webhook URLには、後でGASでスクリプトを作成してDeployしたサーバのURLを記載します。
このLINEアカウントがメッセージを受信したときに、このサーバのURLに受信したメッセージをdoPost関数に送ることできます。
Line Developpersのリンクをクリックします。
コンソールをクリックして、作成したプロバイダを選択し、Messaging API設定タブをクリックします。
チャンネルアクセストークンを発行します。
このアクセストークンはスクリプトで使いますので控えておきましょう。
これは、サーバ側からLINEにメッセージをreply(返信)するときに使います。
また、応答設定ではチャットをオフにし、Webhookをオンにしておきましょう。
OpenAIのAPIキーを取得して、サーバ側のスクリプト作成の準備をしましょう。
以下でSign upしてログインします。Google Accountでも登録できます。
ログインして、Create New Seacret Keyをクリックし、API用のキーを取得します。
これでスクリプト作成の準備完了です。
Google Apps Scriptで、サーバレス環境にてサーバを準備します。
以下のURLにてプロジェクトを作成してスクリプトを作成します。
スクリプトの中の[自身のOpenAIのAPIキー]と[自身のLineチャネルアクセストークン]には、ここまでで控えた文字列を記載しましょう。
// ChatGPTのAPIを呼び出し応答をリターン
function getChatGptMessage(message) {
var uri = 'https://api.openai.com/v1/completions';
var headers = {
'Authorization': 'Bearer [自身のOpenAIのAPIキー]',
'Content-type': 'application/json'
};
var options = {
'muteHttpExceptions' : true,
'headers': headers,
'method': 'POST',
'payload': JSON.stringify({
"model": "text-davinci-003",
"max_tokens" : 2048,
"prompt": message})
};
try {
const response = UrlFetchApp.fetch(uri, options);
var json=JSON.parse(response.getContentText());
return json["choices"][0]["text"];
} catch(e) {
console.log('error');
}
}
//メッセージを受け取ったときにeオブジェクトを取得
function doPost(e) {
let token = "[自身のLineチャネルアクセストークン]";
// JSONデータとして取得
let eventData = JSON.parse(e.postData.contents).events[0];
// JSONデータからreply用のトークンを取得
let replyToken = eventData.replyToken;
// JSONデータからメッセージを取得
let userMessage = eventData.message.text;
// 応答メッセージ用のAPI URLを定義
let url = 'https://api.line.me/v2/bot/message/reply';
// JSONメッセージからreplyメッセージを準備
let replyMessage = userMessage;
//定義したチャットGPTが返答したメッセージをtextをもつペイロード値を設定
let payload = {
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': getChatGptMessage(replyMessage)
}]
};
//HTTPSのPOSTパラメータを設定
let options = {
'payload' : JSON.stringify(payload),
'myamethod' : 'POST',
'headers' : {"Authorization" : "Bearer " + token},
'contentType' : 'application/json'
};
//LINE Messaging APIにリクエストして返答
UrlFetchApp.fetch(url, options);
}
スクリプトを作成しましたら、New Deployをクリックして、歯車をクリックしてWeb appを選択しましょう。Who hasではanyoneを選択して、Deployをクリックします。Authorized accessでログインして承認します。
DeployをクリックするとWeb URLができますのでコピーします。
LINEのWebhook URLに貼り付けて、保存して完了です。
これで自由にLINEで、チャットGPTを使うことができます。
チャットGPTを気軽にLINEで触れるようにする方法をご紹介しました。
これでいつでもchatBotに相談できますね。スマフォでもAIを使いこなす能力があれば、十分コードが書けてしまいますね。ググる感覚で気軽に使えるのも凄い良いです。
・Diffusion Beeのインストール方法
・Diffusion Beeの使い方
・Diffusion Beeに新たなモデルを追加する方法
Diffusion Beeのインストール方法をご紹介します。
Diffusin BeeのWebサイトにアクセスして、dmgファイルをダウンロードしインストールします。
通常のアプリケーションを利用するのと同じで、プログラムを作ることなく簡単に試せるので素晴らしいです。
M1に特化したソフトウェアやプログラムはこのソフト以外、現状では見つけられなかったです。
以下のリンクにアクセスします。
Download for macOSをクリックします。
MacOS Apple Siliconをクリックしてdmgファイルをダウンロードし、ダウンロードしたファイルをインストールします。
アプリケーションを開くとtextを入力する画面が出てきます。ここに書きたい絵の呪文を入力してGenerateをクリックするだけでデフォルトのモデルで絵を描くことができます。簡単にDiffusion Stableをお試しできて、驚愕しました。
Google ColaboでもGPUで試すと数分かかったものが、M1 MACのDiffusionBeeでは数十秒で絵が描けました。
以下は、グリーンの上の白い犬を描いてみました。
結果は、以下のような絵が描けました。オリジナルの絵であり、実在しない犬と場所ですね。
独自モデルをDream Boothで作成したり、デフォルトではないモデルも利用することができます。
サンプルになりそうな、モデルの一覧は以下にあったので参考に載せます。ckptファイルを調達して、好きなモデルを使えます。
Diffusion Beeで右上の3本線のところをクリックして、Settingsを選択します。
Custom Modelで、Add New Modelをクリックします。
クリックして、事前にダウンロードしたckptファイルを選択します。
Custom Modelを設定できたら、Text To Image等でOptionsからCustom Modelを選定することができます。様々なモデルを簡単に試せるのでアイディアが膨らみますね。Image To Imageで、決まった言葉をベースにサービス展開をすることができるのではないかなど、サービス開発についても大きな可能性を感じます。
Stable DiffusionをM1 MACで簡単に試す方法をご紹介しました。
プログラムを書かずに簡単に試すことができて、処理も速く素晴らしいです。
MACを持っている方は、是非試してみてください。
オリジナルモデルを作りたい場合は、Dream Boothを使うと10枚程度の写真でオリジナルAIを作ることもできます。
皆さん、試験の自動化を実施していると思います。
単体ではなく複数機器を跨いだ結合試験、総合試験の自動化を行う場合、シェルスクリプトで柔軟に行うことができますので、ご紹介します。
sshで接続する端末にログインするshellスクリプトを作成します。
パブリッククラウドには、キーを利用してログインするため、「-i」でキーを指定しています。
また、ログイン時にフィンガープリントを残すのが一般的ですが、VIPでログインする場合はエラーが発生するので、フィンガープリントを無視するよう’StrictHostKeyChecking no’オプションを指定しています。
その他、-t をつけることで、擬似端末としてコマンドを実行させます。
◆login.sh
#!/bin/bash
sudo ssh -i ~/.ssh/id_rsa -o 'StrictHostKeyChecking no' -t user@x.x.x.x
作成したスクリプトが使えるか実際に実行するとログインできます。
% sh login.sh
実行したいスクリプトを作成してみます。
ここではシンプルに日時を取得しています。
◆work.sh
#!/bin/bash
date >> test_work.txt
date
exit
実行したい内容を記述したwork.shスクリプトを準備します。ログイン時にこのスクリプトファイルを渡します。
複数のshell実行後に、実行結果を出力しているファイルをダウンロードして、結果を受けとるようにします。
◆auto.sh
sh login.sh 'sh' < work.sh
sudo scp -P 22 -i ~/.ssh/id_rsa user@x.x.x.x:/home/user/test_work.txt ./
実行すると、自動でファイルを取得することができます。
sh auto.sh
また、複数のshellを同時に動かすこともできます。
バックグラウンド(&)で動作させ、プロセスが終わるまでwaitさせることでsshで同時接続ができます。
◆auto2.sh
sh login.sh 'sh' < work.sh &
sh login2.sh 'sh' < work.sh &
wait
sudo scp -P 22 -i ~/.ssh/id_rsa user@x.x.x.x:/home/user/test_work.txt ./
sudo scp -P 22 -i ~/.ssh/id_rsa user@y.y.y.y:/home/user/test_work.txt ./
シェルスクリプトを実行します。
sh auto2.sh
これを応用してログファイルを取得しながら、Webにアクセスしてログを取得する例をあげます。
以下のようなスクリプトで、10秒間新たなNginxのaccessログを取得します。
◆work2.sh
(sleep 10 ;kill $$) &
exec sudo tail -n 0 /var/log/nginx/access.log > ~/access.log
◆auto3.sh
work2.shでアクセスしながら、curlで自端末からアクセスし、ログを取得する一連の流れを自動化することで、試験を行う事ができるようになります。
sh login.sh 'sh' < work2.sh &
curl http://x.x.x.x
wait
sudo scp -P 22 -i ~/.ssh/id_rsa user@x.x.x.x:/home/user/access.log ./
以下にて実行する事ができます。
sh auto3.sh
最終的には期待値と結果を比較する場合、ダウンロードしてきたログファイルをエクセルにまとめて、Excelで比較することで試験を自動化できると思います。
]]>