Algo-AI インフラエンジニアだけどプログラムも書いてみるブログ The next generation is AI 2024-04-09T01:09:59Z https://algo-ai.work/feed/atom/ WordPress https://algo-ai.work/wp-content/uploads/2020/04/cropped-IMG_7lvr2c-e1586613361896-32x32.jpg algo-ai <![CDATA[AIエージェントに関するブログ記事(Chat GPT執筆)]]> https://algo-ai.work/?p=2899 2024-04-09T01:09:59Z 2024-04-02T00:00:00Z はじめに

AIエージェントは、人工知能の進化と共に私たちの日常生活やビジネスの様々な側面で重要な役割を果たしてきました。このテクノロジーは、シンプルな自動応答システムから、複雑な意思決定をサポートする高度なアシスタントに至るまで、幅広い形で実現されています。AIエージェントの目的は、人間の作業を補助し、効率化することにありますが、その実現方法と応用範囲は非常に多岐にわたります。

本記事では、AIエージェントの基礎から最先端の応用例までを網羅的に紹介し、これらのシステムがどのようにして私たちの世界を変えているのか、そして将来どのような可能性を秘めているのかを探求します。AI技術の急速な進化によって、これまでにないほどの可能性が開かれつつある今、AIエージェントがもたらす変革について知ることは、あらゆる業界の専門家だけでなく、一般の人々にとっても重要です。この記事を通じて、AIエージェントの驚異の世界への理解を深め、その将来性について一緒に考えてみましょう。

AIエージェントの歴史と進化

AIエージェントの歴史は、20世紀半ばにさかのぼります。初期の段階では、人工知能研究は主に理論的な探求に限定されていましたが、時間が経つにつれて、具体的な応用への道が開かれていきました。以下のタイムラインでは、AIエージェントの歴史におけるいくつかの重要なマイルストーンを示しています。

  • 1960年代: ELIZAの開発により、初めてコンピュータが人間の言語を模倣することが可能になりました。ELIZAはシンプルなパターンマッチングに基づいており、人間との対話が可能な最初のプログラムの一つとされています。
  • 1997年: チェスプレイヤーのガリー・カスパロフを破ったIBMのDeep Blueは、特定のタスクにおける人間の知能を超えることができるコンピュータの可能性を世界に示しました。
  • 2011年: Siriの登場により、スマートフォンユーザーは音声コマンドを通じて情報を検索したり、日常のタスクを管理することが可能になりました。これは、一般消費者向けのAIアシスタントの普及の始まりを意味しています。
  • 最近: OpenAIのChatGPTのような高度な自然言語処理技術を利用したAIエージェントは、人間との対話において前例のないレベルの能力を示しています。これらの技術は、教育、カスタマーサポート、エンターテインメントなど、様々な分野で応用されています。

このように、AIエージェントは数十年にわたる研究と開発の成果に支えられ、今日では私たちの生活に不可欠な存在となっています。次に、AIエージェントの主要な種類とそれぞれの特徴について詳しく見ていきましょう。

主要なAIエージェントの種類

AIエージェントは、その機能や用途によって様々な種類に分類されます。ここでは、特に重要とされるいくつかの主要なカテゴリーについて紹介します。

1. チャットボット

チャットボットは、テキストまたは音声による対話を通じて、人間のユーザーとコミュニケーションを取るAIエージェントです。顧客サービス、オンラインショッピングアシスタント、健康相談など、幅広い応用があります。自然言語処理(NLP)技術を活用して人間の言語を理解し、適切な回答を生成します。

2. 仮想アシスタント

SiriやGoogle Assistantのような仮想アシスタントは、音声認識と自然言語理解を組み合わせたAIエージェントの一種です。これらは、ユーザーの質問に答えたり、カレンダーの管理、アラームの設定、天気予報の提供など、様々なタスクを実行できます。仮想アシスタントは、スマートフォンやスマートスピーカーなどのデバイスを通じて日常生活に密接に組み込まれています。

3. 自律型エージェント

自律型エージェントは、環境の監視とそこでの自律的な意思決定を行うAIシステムです。これには、自動運転車、ドローン、ロボティックスなどが含まれます。これらのエージェントは、センサーからのデータを解析し、環境内でのナビゲーションやタスクの実行を可能にする複雑なアルゴリズムを利用しています。

4. 推薦エンジン

NetflixやAmazonの推薦システムのように、ユーザーの過去の行動や好みに基づいて、関連する商品やコンテンツを提案するAIエージェントです。これらのシステムは、大量のデータを分析し、個々のユーザーにパーソナライズされた体験を提供することで、エンゲージメントの向上や売上の増加に貢献しています。

これらのAIエージェントは、様々な技術的基盤を用いて構築されており、それぞれが特定のニーズに応じたユニークな機能と応用範囲を持っています。次に、これらのエージェントを支える主要な技術について詳しく見ていきましょう。

AIエージェントの技術基盤

AIエージェントの能力は、その背後にある複数の技術によって支えられています。これらの技術は、AIエージェントが複雑なタスクを処理し、人間のように学習し、適応することを可能にします。主要な技術基盤には、以下のようなものがあります。

機械学習

機械学習は、AIエージェントにとって最も重要な技術の一つです。これは、データから学習し、その学習を基に新しい入力に対して予測や判断を行うアルゴリズムの集合体です。機械学習モデルは、大量のデータを処理し、その中からパターンを識別して学習します。この技術は、推薦システム、画像認識、自然言語処理など、多くのAIアプリケーションにおいて中心的な役割を果たしています。

自然言語処理(NLP)

自然言語処理は、コンピュータが人間の言語を理解し、生成する能力を開発するための技術分野です。NLPは、テキストデータの分析、意味の抽出、さらには言語生成に至るまで、幅広い応用があります。チャットボットや仮想アシスタントなど、自然言語を介してユーザーと対話するAIエージェントにとって、NLPは不可欠です。

深層学習

深層学習は、機械学習の一部門であり、特に大量のデータから複雑な表現を学習するために設計されたアルゴリズムです。深層学習モデルは、多層のニューラルネットワークを使用して、画像、音声、テキストなどのデータから高レベルの抽象化を行います。この技術は、画像認識、音声認識、自然言語理解の分野で革命的な進歩をもたらしました。

強化学習

強化学習は、特定の目標を達成するために最適な行動を学習するAIエージェントの訓練方法です。エージェントは、環境からのフィードバック(報酬やペナルティ)に基づいて行動を選択し、最終的に目標達成につながる最適な行動パターンを見つけ出します。自律型エージェントやゲームプレイの最適化など、さまざまな領域で応用されています。

これらの技術基盤は、AIエージェントの知能を形成する上で不可欠な要素であり、それぞれがAIエージェントの異なる能力を引き出します。次に、これらの技術が現実世界でどのように応用されているのか、いくつかの具体例を通じて見ていきましょう。

AIエージェントの現在の応用例

AIエージェントは現代社会のさまざまな側面で応用されており、人々の生活を豊かにし、ビジネスの効率化を促進しています。以下は、AIエージェントが特に影響を与えている分野のいくつかです。

顧客サービス

多くの企業では、顧客からの問い合わせに対応するためにチャットボットが導入されています。これらのAIエージェントは、顧客の質問に即座に回答することができ、24時間体制でサービスを提供します。また、より複雑な問題については、適切な人間のオペレーターにエスカレーションすることも可能です。これにより、顧客満足度の向上とオペレーションコストの削減が実現されています。

ヘルスケア

AIエージェントは、医療分野でも重要な役割を果たしています。例えば、患者の症状から最も可能性の高い疾患を診断したり、医師の診断をサポートするためのデータ分析を行ったりします。また、患者の健康管理や治療計画の策定に役立つ情報を提供するアプリケーションも登場しています。

金融サービス

金融業界では、AIエージェントが投資の決定支援やリスク管理、顧客サービスの向上などに利用されています。ロボアドバイザーは、ユーザーの投資目標やリスク許容度に基づいて、最適なポートフォリオを提案します。また、フロード検出システムは、不正な取引をリアルタイムで特定し、金融犯罪の防止に貢献しています。

エンターテインメント

映画や音楽、ゲームなどのエンターテインメント分野でも、AIエージェントがクリエイティブなプロセスを支援しています。映画の編集から音楽の作曲、ゲーム内の非プレイヤーキャラクター(NPC)の行動パターンの生成まで、AIは創造的な活動を新たなレベルに引き上げています。また、個々のユーザーの好みに合わせてコンテンツを推薦するシステムも、AI技術によって可能になっています。

これらの例は、AIエージェントが私たちの生活や仕事にどのように統合され、有用なツールとして機能しているかを示しています。しかし、これらの進歩には、プライバシーの保護、倫理的な判断、技術の透明性など、解決すべき課題も伴います。次に、AIエージェントの未来と直面している課題について考察します。

AIエージェントの未来と課題

AIエージェントの技術は日々進化を遂げており、その応用範囲も広がり続けています。しかし、これらの技術の発展は、倫理的、社会的な課題を引き起こす可能性もあります。以下に、AIエージェントの未来に対する展望と共に、直面している課題について述べます。

未来の展望

  • より高度な自律性: AIエージェントは、学習と適応の能力を高め、より複雑な環境での自律的な判断が可能になるでしょう。これにより、自動運転車からスマートシティの管理まで、さまざまな領域での応用が期待されます。
  • 人間との協働: AIエージェントは、人間の能力を補完し、協働することで新たな価値を生み出します。例えば、創造的なプロセスや意思決定プロセスにおいて、AIの提供するデータ駆動型の洞察が人間の直感や経験と組み合わさることで、より良い成果をもたらすことが期待されます。
  • パーソナライズと個別化: AIエージェントは、個々のユーザーのニーズや好みに合わせてサービスを提供することがますます可能になります。教育やヘルスケアなどの分野で、個人に合わせたカスタマイズされた体験が実現されるでしょう。

直面している課題

  • プライバシーとセキュリティ: AIエージェントが個人のデータを収集・分析することは、プライバシー侵害の懸念を引き起こします。また、セキュリティの脆弱性が悪用されるリスクもあります。
  • 倫理的な判断: AIエージェントが倫理的な判断を下すことは困難であり、その行動が人間の倫理観と一致する保証はありません。AIの意思決定プロセスにおける透明性と倫理的なガイドラインの確立が求められます。
  • 雇用への影響: AIエージェントによる自動化の進展は、特定の職種における雇用の減少を招く可能性があります。新たな技術の導入と社会経済システムとの調和が必要です。
  • バイアスと公平性: AIエージェントは、訓練に使用されるデータに含まれるバイアスを学習することがあります。これにより、不公平や差別が再生産されるリスクがあります。

結論

AIエージェントは、私たちの生活や社会に多大な影響を与える技術であり、その可能性は計り知れません。未来に向けては、技術的な進歩と共に、倫理的、社会的な課題への対応が不可欠です。AIエージェントの発展を通じて、より良い未来を築くためには、多様なステークホルダーが協力し、包括的なアプローチを取ることが重要です。技術の力を倫理的に利用し、すべての人々にとっての利益を最大化することが、私たちの共通の目標であるべきです。

AIエージェントに関するこの探究は、技術の現在と未来の可能性、そしてそれが私たちの世界とどのように関わっていくかについての一瞥を提供しました。引き続き、この興味深い分野の発展に注目していくことをお勧めします。

読者へのアクション呼びかけ

AIエージェントの進化は、私たちの生活に新たな便利さをもたらし、ビジネスの運営方法を根本から変える可能性を秘めています。しかし、その一方で、プライバシー、セキュリティ、倫理的な問題など、多くの課題にも直面しています。技術の進歩を正しく理解し、それを利用する上での責任について考えることが、これからの社会に求められる重要な姿勢です。

  • 学びを深める: AIとその応用についてさらに学び、技術の基礎理解を深めましょう。オンラインコースやセミナーに参加し、最新の研究やトレンドについて学ぶことが重要です。
  • 倫理的な考察: AI技術の利用にあたっては、その倫理的な側面についても考慮し、公正で透明性のある利用を心がけましょう。
  • 積極的な参加: AI技術の開発や政策形成に関する議論に参加し、多様な声が反映されるように努めましょう。社会全体で技術の利用に関する合意形成を図ることが、健全な発展には不可欠です。

学習リソースへの案内

AIに関するさらなる理解を深めたい場合は、以下のリソースが役立つでしょう。

  • オンラインコース: CourseraやedXなどのプラットフォームでは、AIや機械学習に関する多くのコースが提供されています。初心者から上級者まで、幅広いレベルの内容がカバーされています。
  • 書籍: 「人工知能は人間を超えるか」や「ディープラーニング」など、AIに関する基礎から応用までを解説した書籍が多数出版されています。
  • セミナー・ワークショップ: 大学や研究機関、業界団体が主催するセミナーやワークショップに参加し、最先端の知識や技術トレンドを学ぶことができます。

AI技術は、私たちの未来を形作る重要な要素です。この技術を理解し、適切に活用することで、より良い社会の実現に貢献できるでしょう。引き続き、AIとその可能性について探求し、学び続けることが重要です。

]]>
0
algo-ai <![CDATA[Ansibleで自動化ファイルを構成管理する]]> https://algo-ai.work/?p=1695 2023-03-23T04:27:34Z 2023-05-28T14:14:00Z Ansibleで大規模な開発をするには、自動化するAnsibleのファイル自体を構成管理する必要があります。playbookを共通化して使うことで、基本パーツと応用パーツを組み合わせて、効率的な自動化を実現できます。複数のパーツを決まったルールに従って作っていくことで、パーツとパーツを組み合わせて応用していくことができれば、Ansibleをうまく使えている状態になります。本記事ではAnsibleの基本構成を簡単にまとめます。

Ansibleのインベントリーファイルを作成する

インベントリファイルで何に対して自動化を行うのか対象を定義できます。定義ファイルのデフォルトを設定することもできます。一度設定すると、今後コマンドを打たずして、省略してInventoryファイルを利用できます。

[defaults]
log_path = $HOME/.ansible/ansible.log
host_key_checking = False
retry_files_enabled = False
inventory = $HOME/inventory.ini

playbookの構成

playbookは大きく4つのセクションで、基本はTargetsセクションとTasksセクションのみ記述が必須です。
非常にシンプルな構成でわかりやすいですね。

・Targetsセクション:対象が何か明記します。jinja2ファイルを挟み動的に対象を指定することもできます。
・Tasksセクション:何をするか明記します。
・Varsセクション:変数を定義します。
・Handlersセクション:Tasksセクションで実行がうまく行った時のみ実行します。TasksのNameと合わせて名前をつける必要があります。

---
- name: name
  vars:[変数]
  tasks:[何をするか]
  targets:[対象]
  handlers:[タスクが成功した場合に実行]

playbookを作ってみる

<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のまとめ

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のファイルを構成管理する方法をご紹介しました。一度、自動化できるファイルを作成しておくと使いまわすことができて便利です。一時的なイベントサイトの構築や検証環境構築に役立たせることができると思います。是非、お試しください。

]]>
0
algo-ai <![CDATA[MenuにLanguage変更の項目を作成する]]> https://algo-ai.work/?p=2267 2023-03-23T04:27:05Z 2023-05-21T03:10:00Z MenuにLanguage項目を作成して、多言語化サイトを実現する方法を紹介します。WordpressでBogoで多言語化することができましたが、選択項目を隠してスマートなUIにしたいと思いました。今回ご紹介するものはカテゴリと同程度の表記でLanguage項目を作成し、English、Japaneseを選択することができる方法です。

やりたいこと

WordPressのメニュー項目に言語設定する項目を選ぶと日本語か英語かその他の言語化を選べるようにすることです。やりたいことはシンプルですが、Bogoの標準機能ではないです。

Bogoのインストール方法はこちらの記事でご紹介しています。
併せてお読みください。

Menuから設定をする

外観からメニューを選択します。

メニューを選択すると固定ページやカスタムリンクを追加することがわかります。
カスタムリンクでLanguageと、Languageを親にもつJapaneseとEnglishを作成します。

作成するときにメニューの構成を作れますので、Languageの下にJapaneseで日本語トップページのURLを記載し、Englishで英語のトップページのURLを記載します。これで、メニューにLanguage項目ができてJapanese/Englishを選択することができるようになります。

終わりに

MenuにLanguage項目を作成して、多言語化サイトを実現する方法を紹介しました。ページの人枠を使って言語設定をできるようにするのは、冗長な情報だと思いこの手法をとることにしました。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[Chrome拡張機能とBogoでWordPressを英語訳]]> https://algo-ai.work/?p=2156 2023-03-23T04:26:52Z 2023-05-06T15:10:00Z Chrome拡張機能とBogoを使ってWordpressを多言語化する方法、Google翻訳をうまく使い効率的に翻訳する方法をご紹介します。Webサイトを作成したら、海外のサーチエンジンにも表示されれば、アクセス数が爆発的に伸びる可能性がありますよね。日本語だけではなく、海外でも通用するブログ記事は積極的に多言語化すると良いと思い、多言語化する方法をご紹介します。

Bogo

無料でWordpressを多言語化することのできるプラグインです。自身の場合は英語のページをサブディレクトリ型の形式で作成できれば十分で、このプラグインが適していました。個人でWebを公開している方は複数サイトを運営するのは労力がかかり、力が分散してしまうので1つのサイトを育てることを考えるとサブディレクトリ型で作成できると良いです。できれば同一Wordpressの管理下で作業できると良いと思いました。結果、Bogoは素晴らしいプラグインだと思いました。また、多言語サイトを1つずつ手動で作成でき、アイキャッチ画像やOGP画像を個別に作成することができます。自身の場合は1週間に1ページ作ることを目標にしており、多言語化することで1週間に数ページを予約投稿してアップしていくこともできるようになります。

ダウンロードしてプラグインを有効化すると、ダッシュボードの左側のタブにLanguagesが表示されます。Installed Languagesを選択します。

利用可能な言語をInstallします。120カ国語以上あり驚きです。

インストールすると、投稿ページや固定ページの記事を作成する画面で、文書タブに「言語」の項目が表示されます。英語のページを作るとき、英語を選択して「翻訳を追加」ボタンをクリックします。

英語(アメリカ)ページが作成されました。このページは公開すると、「ドメイン名/en/blog/[パーマリンク]」というURLに保存されます。

以降、多言語のページを修正するときは、同一の記事の編集ページから各言語を選択して、各言語のページごとに修正することになります。まずはGoogle翻訳を使って、効率的に翻訳してみます。

Google翻訳で効率的に翻訳する

Bogoでは1ページずつ自分自身で英訳したページを作成する必要があります。個人でサイトを公開している方はできる限り無料で、効率的に翻訳をしたいと思います。そこで、Chromeの拡張機能であるGoogle翻訳を利用して、コピー&ペーストで簡単に英語訳のWebページを作成する方法をご紹介します。Google翻訳のAPIを使うと自動で翻訳記事を作成する方法もありますが、使い過ぎると料金がかかってしまいます。また、アイキャッチ画像等は別に作成すると思いますので、1言語ずつページを作ります。

この方法はプレビュー画面でも翻訳できますので、公開前の記事でも活用できます。

Chrome拡張機能 Google翻訳を追加

Google翻訳を使う上で、翻訳ページに日本語をコピペして、英訳をコピペするのは少し作業が多いです。そこで、Webページを丸ごと翻訳をかけてしまい、コピペを測ります。効率的ですよね。

まずは、Chrome拡張機能をインストールします。

右上のパズルのようなボタンを押して、Chromeの拡張機能を使ってみます。

「このページを翻訳」とありますので、翻訳したい自身のサイトでこのリンクをクリックします。

公開まであれば、プレビュー画面になります。

多くの言語を選択できますね。今回は英語を選択しました。

英語のページが表示されます。タイトルから終わりにまでのコピーしたい部分を全て選択してコピーし、Wordpressの編集中の画面に貼り付けます。

画像のサイズやコピペが上手くいかなかった点を修正して整えたら英語ページが完成です。

終わりに

Chrome拡張機能とBogoを使ってWordpressを多言語化する方法、Google翻訳をうまく使い効率的に翻訳する方法をご紹介しました。日本語には日本をスコープとする制約がありますので、是非世界に向けて記事を発信するきっかけとしていただけたらと思います。日本の人口は右肩下がりですが、世界では人口は右上がりです。インターネットユーザも間違いなく世界では右肩上がりですので、是非お試しください。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[AWSの無料SSL証明書でSSL化しCDNで高速化]]> https://algo-ai.work/?p=1871 2023-03-23T04:26:14Z 2023-04-23T03:00:00Z お名前.comのドメインを使い、AWSの無料証明書を利用してWebサイトをSSL化する方法をご紹介します。SSL証明書は無料です。今回ご紹介する方法は、AWSのRoute53を利用せず、お名前.comを使います。ドメインを複数年払いで契約している場合、ドメインのみAWSを利用していないこともあります。移行せずにお名前.comを継続で使い続け、AWSのCloud FrontとCertificate Managerを使い、WebサイトをSSL化することができます。

AWSの無料証明書

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からの署名を受けることで、ドメインの所有者が証明されます。

SSL証明書の作成

Certificate Managerへアクセスします。

AWSの署名付き証明書を取得するため、リクエストを送ります。
ドメインの正当性が証明されるまで証明書は発行されません。

パブリック証明書をリクエストします。完全修飾ドメイン名には利用予定のドメインを記載します。今回の場合はお名前.comで利用しているドメインです。その他はデフォルトのままリクエストをクリックします。

リクエスト後に証明書の状況をみると、ステータスが保留でCNAME名、CNAME値が記載されています。ドメインを持っていることを証明するために、この情報をお名前.comでcnameのレコードとして登録し、保有していることを証明します。証明が完了すると「成功」と表示されます。

お名前.comでcnameの設定

お名前.comでcnameを設定して、AWSにドメインを保有していることを証明します。

DNSでCNAMEの設定を行います。

CNAMEレコードとは、別名に正式名を紐づけることができる仕組みです。この仕組みを使って証明書を保有していることを示すとは面白いですね。

お名前.comにアクセスして、ドメインタブから「ドメインのDNS設定」をクリックします。

DNSレコード設定を利用するの「設定する」ボタンをクリックします。

CNAMEレコードの追加をします。TYPEの「CNAME」を選択して、ホスト名に「CNAME名」を記載し、VALUEには「CNAME値」を記載します。追加ボタンをクリックして、確認して設定します。

登録が完了して暫くしたら、AWS側のリクエストが完了して、証明書が発行されます。

Cloud Frontで証明書を選択してWeb公開

作成した証明書をCloud Frontに設定します。
ディストリビューションを作成して、公開したWebサーバの情報があるオリジンドメインを選択します。

お名前.comのドメインを使うため代替ドメイン名(CNAME)を設定します。証明書と同じ名前にします。

SSL証明書を選択します。リクエストして作成された証明書を使うことができます。

Cloud Frontでウェブサーバを公開できているはずですので、数分待ってからディストリビューションドメイン名をコピーして、ブラウザの別タブのURLでアクセスできれば成功です。

終わりに

お名前.comのドメインを使い、SSL証明書を利用してWEBサイトをSSL化する方法をご紹介しました。証明書は無料で、自動更新もできます。さらに、Cloud Frontを使うことでAWS Shieldによるセキュリティの向上、CDNによる高速化もできました。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[xfreeでデータベース接続確立エラー]]> https://algo-ai.work/?p=2016 2023-03-23T04:25:50Z 2023-04-08T15:10:00Z xfreeでWordpressを立ち上げる際のエラー解決方法をご紹介します。xfreeではwordpressを5サイトまで無料で立ち上げることができるお得なサービスが提供されています。Web画面で操作するのみで個人サイトを作ることができる素晴らしいサービスです。しかし、いざ使おうとするとデータベース接続確立エラーが発生し、Wordpressのログイン画面にすら辿り着けません。そこでエラーの解決方法をご紹介します。

データベース接続エラー

WordPressを立ち上げ後に接続しようとすると、「データベース接続エラー」が発生します。この画面だけではわからないと思いますが、原因はWordpressではよくありがちなエラーなようで、wp-config.phpにlocalhostの記載があることです。そのため、wp-config.phpのlocalhostを127.0.0.1に変更すると接続できます。

FTP接続でwp-config.phpを変更する

wp-config.phpの設定を変えるには、xfreeではftp接続が可能です。ftp接続してwp-config.phpファイルを取得して、中身を修正してwp-config.phpを上書きします。まず、設定画面からFTPの接続を有効にします。

「FTPアカウント設定」ボタンをクリックします。

FTPアカウント設定の「設定変更」ボタンをクリックします。

「全てのファイル・フォルダにアクセスする」にチェックを入れます。チェックを入れることでwp-config.phpがあるフォルダへアクセスできるようになります。

「設定変更(確認)」ボタンをクリックします。

「設定編集(確定)」ボタンをクリックすると、FTPのアカウントIDとパスワードが取得できます。控えておきます。

FTPクライアントソフトの準備

自身の端末はMACで、FileZillaを使います。MACのFTPクライアントはFIleZillaが使いやすくておすすめです。

Windowsではwinscpをダウンロードして使うと良いでしょう。人気のあるFTPクライアントソフトウェアです。

FileZillaでxfreeにFTP接続

FileZillaを開いて、赤枠のボタンをクリックして新規接続をします。

ホスト名にはFTPホスト名、ユーザ名にはFTPアカウント名、パスワードには先程控えたパスワードを入力します。また、xfreeは暗号化に対応していないようで、「平文のFTPのみを使用する」を選択します。暗号化されていない通信になるため、公共のWi-Fiなどのリスクの高い環境ではこの作業はやらない方が良いでしょう。

接続ボタンをクリックすると接続できます。wp-config.phpは「/」ディレクトリにあるので「/」を選択します。

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フォローしてください。

]]>
0
algo-ai <![CDATA[Cloud Frontでindex.htmlを省略]]> https://algo-ai.work/?p=1888 2023-01-06T15:37:01Z 2023-03-19T03:10:00Z Cloud Frontでサブディレクトリのindex.htmlをファイル名を省略してアクセスさせる方法を紹介します。wordpressの静的ファイルを配置したS3をWeb公開するときにサブディレクトリのindex.htmlを見てくれなくてはまりました。Cloud Front + S3でCDN、SSL化対応をしてWeb配信することは魅力的ですよね。スムーズに落ちないサイトを公開できればそれだけで仕事になると思います。

やりたいこと

「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フォローしてください。

]]>
0
algo-ai <![CDATA[AWSのEC2で多段ProxyサーバをSquidで構築]]> https://algo-ai.work/?p=1489 2023-01-06T14:46:37Z 2023-03-11T15:10:00Z SaaSが流行し、内部ネットワークからSaaSのProxyを利用したいということもありますよね。
AWSでサクッとプロキシサーバを立てて、多段プロキシ構成を実装する方法をご紹介します。

内容

・AWSでEC2を立てる
・Squidサーバを構築して多段プロキシする設定を入れる

AWSでEC2を立てる

まずはプロキシサーバを立てるサーバを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

Squidサーバを構築して多段プロキシする設定を入れる

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を利用して多段プロキシ設定をしたいときはお試ししてみてください。

]]>
0
algo-ai <![CDATA[NGINXでConvert for Mediaプラグインを使う]]> https://algo-ai.work/?p=1906 2023-01-06T01:14:36Z 2023-03-04T15:10:00Z WebPやAVIFといった次世代画像ファイル形式にする密かに進んでいます。WordpressでWebPやAVIFにするときに、NGINXでは追加設定がいります。今回はConvert for Mediaを利用します。他のプラグインを使ったところ、画像のコンバート数の制限があり、Convert for Mediaへ辿り着きました。

WebPになぜするべきか

次世代画像フォーマットは非常に軽く、アクセス速度が速くなるためです。 数百KBのファイルが、数十KBのファイルに変わりレスポンスが早くなります。ストレージ容量の効率化、アクセス速度の高速化が期待できるため、自身は次世代画像フォーマットは積極的に使います。

Convert for Mediaの追加

WordPressよりConvert for Mediaプラグインの検索を行いインストールし、プラグインを有効化ます。

有効化するとメディアタグにConvert for Mediaの欄が増えますので、こちらをクリックして設定できます。

NGINXの設定

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

Convert for Mediaを実行する

デフォルトの設定を確認します。

WebPがチェックされています。

uploadsが選択されていることを確認します。画像がアップロードされているフォルダです。

Start Bulk Optimizationをクリックして実行します。WebP画像へのコンバートが走ります。画像枚数制限がないの優秀ですね。

もし失敗したら

デフォルトの設定では元のファイルは削除されません。NGINXで設定した内容を削除してリスタートすれば、元の状態に戻せます。
失敗しても焦らず修正しましょう。

恐らく、NGINXのパスが異なると思いますので、正しいパスに書き換えて実行すると動作すると思います。

終わりに

NGINXでConvert for Mediaを使って、WebP化する方法をご紹介しました。画像サイズを縮小し、レスポンスが速くなることが期待できますので、是非お試しください。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[Linuxの便利コマンド 備忘録]]> https://algo-ai.work/?p=1893 2023-01-20T07:44:03Z 2023-02-26T12:21:00Z Linuxのコマンドを忘れてしまうので、書き留めておきます。

grepで本文検索

grep [検索したい文字列] -rl [検索対象フォルダのパス]

findでファイル検索

find . -name [探したいファイル名] | xargs grep [本文]

特定のファイル名で一括で特定の文字を含む行を削除

find . -name '[特定の一括ファイル名(*.html)]' | xargs sed -i -e '/[削除したい行が含む文字]/d'

特定のファイル名で一括で文字を置換

find . -name '*.html' | xargs sed -i '' 's/[置換前の文字]/[置換後の文字]/g'

5分後にコマンドを実行

sleep 300;systemctl restart nginx &

更新があったファイルだけ表示

60分以内に更新されたhtmlファイルを表示

find /var/www/ -name '*.html' -mmin -60 

Diffでディレクトリごと差分をとる

diff -rq [ディレクトリ1] [ディレクトリ2]

終わりに

Linuxのコマンドを忘れてしまなわいように備忘録で登録しました。今後も更新していきます。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[WordPressをアップグレードせずに未対応のプラグインを使う]]> https://algo-ai.work/?p=2153 2023-02-03T08:37:10Z 2023-02-19T08:13:00Z WordPressを利用している方はアップグレードをしたくない人も多いのではないでしょうか?一方で、新しくプラグインは導入したいと思いますよね。そんなときに、Wordpressをアップグレードせずに現Wordpressのバージョンに未対応のプラグインを導入する方法をご紹介します。WordPressをプラグインに合わせるのではなく、プラグインをWordPressのバージョンに合わせたいというアプローチです。

内容

現Wordpressのバージョンに未対応なプラグイン

自身の場合は、Bogoをダウンロードしようとしたときに、「WordPressを更新してください」と表示されました。使用中のWPバージョンと非互換であり、まずはWordPressの更新を考えると思います。一方で、WordPressの更新をしたくない場合、バージョンが合わないため、このプラグインを導入することを諦めてしまうかもしれません。諦めなくても、今のWordPressと互換性のあるものを導入することができます。

古いバージョンのプラグインをダウンロードする

古いバージョンのプラグインをダウンロードし、現WordPressのバージョンにマッチするものをダウンロードします。古いバージョンのプラグインに辿り着くための遷移方法をご紹介します。

「WordPress.org プラグインページ」をクリックします。

「開発」タブをクリックします。

「詳細を表示」をクリックします。

開発バージョンを指定して、ダウンロードできます。
複数のバージョンのプラグインをダウンロードして、インストールして対応しているかを試していきます。

古いバージョンのプラグインをインストールする

プラグインの新規追加より「プラグインのアップロード」をクリックして、ダウンロードしたプラグインをアップロードして有効化し、利用できるプラグインを探していきましょう。

最終的に動くバージョンのプラグインを見つけることができれば、プラグインのバージョンをWordPressのバージョンに合わせることで使うことができました。

セキュリティ

プラグインのバージョンを落としているため、セキュリティ上最新のものより劣化したものを使うことになることは気をとめておいた方が良いでしょう。この状況を回避する対策は、WordPressの動的サイト自体は公開せずに、静的化したサイトを公開することでセキュリティを強化することができます。

こちらの記事にてご紹介していますの是非お読みください。

終わりに

WordPressをアップグレードせずに現Wordpressのバージョンに未対応のプラグインを導入する方法をご紹介しました。WordPressをプラグインに合わせるのではなく、プラグインをWordPressのバージョンに合わるアプローチで、使いたいプラグインを使うことができます。また、プラグインのバージョンダウンによるセキュリティの低下に対して、動的なWordPressは公開せず、静的化したページのみを公開することでセキュリティが低下するデメリットを回避する方法も別記事にて公開しております。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[Ansible AWSでansibleコマンドを使う]]> https://algo-ai.work/?p=1650 2023-01-30T01:52:12Z 2023-02-12T21:20:00Z AWS上で仮想実行環境を構築しAnsibleコマンドを使います。playbookではなく、コマンドのみでansibleを試します。AWSのEC2でRHEL7.7のサーバを準備し、pythonの仮想実行環境を構築します。ansibleをインストールして、localhostにモジュールを使いansibleコマンドを実行します。

AWS EC2でt2.microを立てる

ansibleをAWS上で試します。
Cent OS7のAMIを選択して作成しました。

cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)

Ansibleユーザの作成とSSH接続をできるようにする

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

仮想実行環境(virtualenv)に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コマンドを試す

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": []
    }
}

Ansibleのインベントリーファイルを作成する

何に何をするかでいう、何にをまとめて定義することができます。
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の癖も掴んでいきたいと思います。

]]>
0
algo-ai <![CDATA[staaticでwordpressを静的化してs3でWeb公開]]> https://algo-ai.work/?p=1793 2023-02-03T08:12:34Z 2023-02-03T03:10:00Z wordpressを静的化してAWS S3で静的Webホストティングをするやり方をご紹介します。static pressやwp2static、simply staticでも試しましたが、phpのタイムアウト時間の設定変更など上手くいかなかったため、staaticを使ってWordpressを静的化しました。静的化できるとAWSのS3でWeb公開を行い、

staaticのインストール

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フォローしてください。

]]>
0
algo-ai <![CDATA[Ansibleの条件分岐をやってみる]]> https://algo-ai.work/?p=1660 2023-02-02T13:41:07Z 2023-02-02T13:35:41Z Ansibleはシンプルであることが強みであり、検証や複雑な処理は苦手です。条件分岐は複雑化する処理であり、あまり積極的に取り入れるべきものではありませんが、どうしても条件分岐をしたいこともあると思います。条件分岐をやってみます。

結果を変数に格納しwhenに一致したときに実行

条件分岐は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で条件分岐して、コマンドを実行させることができます。

]]>
0
algo-ai <![CDATA[Ansible メリット・デメリット]]> https://algo-ai.work/?p=1634 2023-02-02T13:53:22Z 2023-02-02T03:10:00Z

Ansibleは、オープンソースのオーケストレーションおよびコンフィギュレーションツールです。シンプルなYMLファイルを書くことにより、ネットワーク、サーバー、クラウドなどさまざまなインフラストラクチャを自動化できます。 今回は、YMLファイルの基本を学び、Ansibleを使用してインフラストラクチャのインフラフレームを自動化する方法をご紹介します。Ansibleのメリットデメリットを考えました。

クラウドの推進により自動化をするべき

まず、クラウド利用が進んでいますが、クラウドは従量課金です。
コストは高いため、必要なときにインフラを用意し、不要なときには環境を削除する運用が向いています。
クラウドは高いので、ケースにあった場合に使えると思います。
自身は検証環境を一時的に利用したいケースが多いので、自動構築ができると使いたい時だけサクッと検証環境を作れてメリットがあります。
Ansibleを使いこなして、自動化してクラウドを使い倒しましょう。
一方で、永年無料で利用できるサーバを提供している太っ腹なOracle Cloud Infrastructureもあります。
興味がある方はこの記事も併せてお読みください。

Infrastructure as Code

Infrastructure as Codeは手作業で行っていたインフラの構築や変更作業をコードで定義して自動化することです。アプリケーションで実施してきたことを、インフラレイヤでも、コードでインフラリソースを操作することに応用していくことができます。コードでインフラを管理することで、運用コストの削減、品質向上、作業を標準化することによるガバナンスを効かせるメリットがあると思います。
一方で、設計書等がいらなくなるかもしれませんが、バージョン管理やCIツールによりコード自体を管理していくことが必要になります。インフラエンジニアがアプリケーションよりの運用方法を理解することには時間を要しそうですね。

Infrastructure as Codeの適用範囲

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とは

Ansibleは、インフラストラクチャの自動化用に開発されたオープンソースのオーケストレーションツールおよびコンフィギュレーションツールです。インフラストラクチャを簡単に設定および構成することができるのが特徴です。YML(YAML Markup Language)でplaybookを書くことによって、複数のシステム構成を自動で構築できます。YMLファイルは、インフラストラクチャを自動化するための命令セットです。

 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

Ansibleのメリット・デメリット

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を仮想マシンで使用する場合、変数で仮想マシンの環境を定義する必要があります。

AnsibleではInventoryとPlaybookを定義して自動化

シンプルな構成として、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版の両方を試していきたいと思います。

]]>
0
algo-ai <![CDATA[AWS Consoleでスナップショットをアップロードして自前のVMDKを移行する]]> https://algo-ai.work/?p=1529 2023-01-27T07:51:26Z 2023-01-26T15:19:00Z EC2のimage-importが上手くいかないとき、import-snapshotを使うとAWS上にimportできます。
既存の仮想サーバ(vmdk)の移行をスナップショットを介して移行する方法をご紹介します。AMIを作る際にエラーが出てしまうvmdkファイルを、無理やりAMIにする方法として、スナップショットをベースに作ることができます。
エラー処理を回避し、ローカルなvmdkファイルをベースにEC2サーバを立てることができます。

内容

・vmdkファイルをS3にアップロードする
・M1 macでaws consoleを利用できるようにする
・vmimportのロールとしてIAMの設定を行う
・S3のvmdkファイルをスナップショットの領域へコンバートする
・スナップショットからイメージを作り自分のAMIを作る

vmdkファイルをS3にアップロードする

AWSのストレージサービスS3にvmdkをアップロードします。
vmdkは既に手元にあることを前提とします。ESXiでは対象の仮想サーバ上で右クリックしてエクスポートすればvmdkファイルを入手できます。
S3には、Web画面でドラッグ&ドロップでアップロードできますので、GUIで操作できます。
アップロードをクリックし、ファイルを選択してアップロードボタンを押してアップロードします。

「s3://backet/test.vmdk」のような、s3のURIを控えておきます。
コマンドで、S3のURIを指定してスナップショットへ移行するためです。

M1 macでaws consoleを利用できるようにする

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の画面でユーザを選択し、認証情報タブで、アクセスキーの作成をクリックすると作成できます。

vmimportロールとして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

S3のvmdkファイルをスナップショットの領域へコンバートする

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": []
        }
    ]
}

スナップショットからイメージを作り自分のAMIを作る

スナップショットとして、AWSに取り込めれば、残りはGUI環境で操作して対応できます。

Elastic Block Storeのスナップショットを開くと、登録したスナップショットがあります。
選択して確認しましょう。

[スナップショットからイメージを作成]を選択します。

イメージ名やアーキテクチャを選択して、イメージを作成します。
今回はtestというイメージ名で作成しました。

ここまでで自分のAMIを作成できました。
EC2の起動は通常通りですので、「自分のAMI」より作成したAMIイメージを選択して、インスタンスタイプ等選択して、ご自由にサーバを立てられますね。

終わりに

この記事では自前のVMDKファイルをスナップショットへコンバートし、自身のAMIイメージを作成してEC2サーバを建てる方法をご紹介しました。これでvmdkファイルをAWS上に移行することも試せます。他の方法でエラーが発生していて上手くいかない方は、是非スナップショットから自身のAMIイメージを作成する方法をお試しください。

]]>
0
algo-ai <![CDATA[AWS Cloud FrontでLet’s EncryptでSSL化]]> https://algo-ai.work/?p=1827 2023-01-04T08:20:52Z 2023-01-22T21:10:00Z AWS Cloud FrontでLet’s Encryptの証明書を使いSSL化します。従量課金により破格で無料でSSL化のWebページの公開を始められます。Cloud Frontはアクセス数に応じて費用が発生し、SSL証明書を無料で手に入れることができれば、無料で始められます。爆速・安全なサイトをCloud Frontで提供する方法をご紹介します。

M1 MacでLet’s Encryptの証明書を取得

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に送付する

Cloud Frontに証明書一式をAWSコマンドで送付します。

IAMユーザを作成

まずはIAMユーザに権限を付与するためのポリシーを作成します。JSONタブで以下を作成し、ビジュアルエディタに戻って、次へ進み続けて「ポリシー作成」ボタンを押します。画面にボタンがない場合は、Web画面の文字を小さくしていくとボタンが見えてくると思います。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:*ServerCertificate",
                "iam:*ServerCertificates"
            ],
            "Resource": "*"
        }
    ]
}

ポリシーを作成したらIAMを開きユーザを作成します。

ユーザを追加します。

作成したポリシーでcertificateの権限を与えユーザを作成します。

作成したユーザを選択して、認証情報タブを選択します。

その中で、アクセスキー欄がありますので、アクセスキーの作成をします。

アクセスキーとシークレットアクセスが取得できますので、控えておきましょう。aws consoleにて後ほど使います。

aws cliで証明書をCloud Frontに送付

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で証明書を設定

作成した証明書をCloud Frontに設定します。
ディストリビューションを作成して、公開したWebサーバの情報があるオリジンドメインを選択します。

独自ドメインを使うため代替ドメイン名(CNAME)を設定します。

SSL証明書を選択します。先ほどアップロードした証明書があれば成功です。

Cloud Frontでウェブサーバを公開できているはずですので、数分待ってからディストリビューションドメイン名をコピーして、ブラウザの別タブのURLでアクセスできれば成功です。

お名前.comで独自ドメインをCloudFrontに紐づける

お名前.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フォローしてください。

]]>
0
algo-ai <![CDATA[Chrome拡張機能でInstagramの自動投稿]]> https://algo-ai.work/?p=2347 2023-01-16T04:52:11Z 2023-01-15T14:42:46Z 無料でInstagramの自動投稿をする方法をご紹介します。基本的にInstagramでは自動投稿はできないようになっているため、予約投稿を自動で予約する方法をご紹介します。自動で予約投稿ができれば、実質的には自動投稿ができると言えると思います。この方法は再投稿を自動化するところまでをご紹介します。RPAを利用するため、動作を安定させるためにあらかじめ作成した下書きを自動予約することを定期的に繰り返すことを実現します。再投稿の場合は完全自動で、新規投稿をしたい場合は予約されたものを修正するだけで効率的に予約投稿ができるようになります。

Instagramで自動投稿をする方法

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

Statusbrewはソーシャルメディアのためのコンテンツマーケティング管理やリスクマネジメント対策、コメント監視を含めたエンゲージメント管理を一元化し、社内の承認ワークフローの最適化と高機能分析ができるものです。無料版では、予約投稿やカテゴリの定義、プランの定義などができます。また、TwitterやFacebook, Instagramなど、複数のSNSに1つの投稿を一元的に簡単に出すことができます。今回はInstagramの予約投稿をする目的で利用します。

Statusbrewの導入

ユーザを作成してログインすると、スペースを作成できます。任意の名前を入力して「作成」をクリックします。

スペースを作成して、作成したスペースを選択するとソーシャルプロファイルを接続できます。
Instagramをクリックします。

自身は「Facebook経由のログイン」をクリックしました。

Instagramの設定でアプリとウェブサイトから、Statusbrewを許可します。

無事に連携できれば成功です。

Statusbrewの使い方

Statusbrewは使うのに慣れが必要だと思いました。

ログインして、左上のロゴを押すと、トップページにアクセスできます。無料版では、カレンダーとカテゴリー投稿が設定できます。

カレンダーでは予約投稿ができ、カテゴリー投稿ではカレンダーで使う予約パターンを設定できます。このカテゴリー投稿をうまく使うと効率的に予約設定ができます。

カテゴリー投稿

カテゴリー投稿は、カテゴリー名をつけ、予約パターンを作ることができます。

例えば、以下のように設定すると、月・水・金の朝6:45に同じ投稿を行えるように設定できるパターンです。パターン化することができ、うまく使えれば効率化できます。

名前はわかりやすい名前にしておくと、予約する時に便利です。

投稿の下書き

自動化に向けて、直接予約はせずに下書きを作成します。下書きを複製して予約投稿する準備です。

左の紙飛行機のアイコンをクリックして、「下書き」を選択します。

「投稿を作成」をクリックします。

ソーシャルプロファイルやテキストを入力し、Instagramに定期予約したい写真をアップロードします。定期予約であるため、予約後に写真を差し替えることはできます。「下書きを追加」にチェックを入れます。

カテゴリー予約で、作成したカテゴリーを選択します。日時ではなくパターン予約ができるのでいいです。

「下書きを追加」ボタンをクリックして下書きを作成します。
事前準備では、この下書きを複数作成します。一度に予約できるのは、無料版では10件までです。この記事で紹介する方法では、月〜日までを、1つずつカテゴリとして作ると無料で柔軟な全自動予約ができます。自身はそこまでは細かくなるため、とりあえずまとめて作成してみました。週2回程度自動で予約されても十分だと考えた次第です。

Chrome拡張機能のインストール

自動化にあたっては、Chrome拡張機能のUI Vision RPAとcrontabを使います。Chromeの操作を自動化できるRPAツールとあらかじめスケジューリングした内容で定期実行ができるツールです。

Chrome拡張機能で定期実行

UI Vision RPAで下書きを複製して自動予約を行います。

UI Vision RPAを開き「+Macro」ボタンをクリックして、マクロを新規に作成します。

「Record」ボタンをクリックして、Statusbrewを自動操作してChromeの動作を記録します。

具体的には下書きの画面で、作成した下書きをクリックして「・・・」をクリック、「投稿を複製」を選択します。

画面が切り替わったら投稿までの操作を行い、RPAに覚えさせます。「下書きを追加」のチュックを外し、承認者をアサインの項目で「承認なし」を選択、「予約投稿」をクリックすれば完了です。すぐ投稿されるわけでは無いので、予約投稿を押してテストします。完了したら、UI Vision RPAの「Stop」ボタンを押してRecordを終了します。

UI Vision RPAで操作を記録できました。「Play Macro」を実行して正常に動くか確かめます。正常に動けば再投稿ができるマクロができました。

マクロをHTML化

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フォローしてください。

]]>
0
algo-ai <![CDATA[お名前.comの独自ドメインでAWSのS3でWeb公開]]> https://algo-ai.work/?p=1811 2023-01-05T23:29:49Z 2023-01-15T21:20:00Z お名前.comで取得している独自ドメインでAWSのS3でWebを公開する方法をご紹介します。セキュリティを考慮しなければ、爆速で爆安です。S3は従量課金で非常に安いです。クラウドのメリットであり使い倒さない手はないですよね。今回は、独自ドメインをS3で静的ホスティングによりWeb公開する方法をご紹介します。

AWSで静的Webホスティング

まずは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で公開したWebにアクセス

S3でプロパティタグから「バケットウェブサイトエンドポイント」にURLが記載されています。クリックしてアクセスできるか試してみましょう。

まずは、index.htmlのファイルをアップロードしましょう。「Hello,World」と書いただけのhtmlファイルでもOKです。

その後、「パケットウェブサイトエンドポイント」のURLをクリックしてページが見れることを確認します。

お名前.comで独自ドメインをS3に紐づける

お名前.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フォローしてください。

]]>
0
algo-ai <![CDATA[Instagramに自動でフォロー・いいねをつけられるChrome拡張機能]]> https://algo-ai.work/?p=2325 2023-01-14T11:05:18Z 2023-01-14T09:02:00Z Chrome拡張機能でInstagramの自動フォロー・自動いいねを定期的にする方法をご紹介します。手動でフォローし続けている人は、自動で特定のタグの投稿をしているユーザを定期的に自動でフォローすることができるようになります。RPAで自動化をする方法で、応用が効く汎用的な方法です。ブラウザ操作は自動化して、手動でやっていることは自動化して楽をしましょう。

Chrome拡張機能

利用するChrome拡張機能は以下の3つです。
自動いいね&フォローをhtmlファイルを開くことで自動実行する方法です。

  • Superpowers for Instagram : ワンクリックで20ユーザの自動フォローや自動いいねが可能
  • UI Vision RPA:ブラウザ操作をRPAで自動化
  • cronTab:ブラウザで定期的にコマンドを実行可能

まずは、3つのChrome拡張機能をインストールします。

「Superpowers for Instagram」は利用しなくても、UI Vision RPAを操作していいねとフォローをできるように作り込むことはできますが、より安定した操作をするためにモジュールとして使える感覚であるため、今回は利用することにしています。RPAの欠点である不安定な動作を少し補うことができます。

Superpowers for Instagram

Superpowers for Instagramを試します。
Instagramを開きフォロー、もしくは、いいねをしたいタグのページを開きます。

試しに、「https://www.instagram.com/explore/tags/followforfollowback/」を開くと、「Like all」ボタンと「Follow all」ボタンがあります。これをクリックすると直近に投稿した人の投稿に対して、20人分いいねをするか、20人分フォローをできます。

UI Vision RPA

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

cronTabを使いこのHTMLファイルを定期的に開きます。1時間に1回実行する例としては、Minuteが40で割り切れる時に実行します。direct=1とすることで直接実行できます。オプションをつけ忘れるとうまく動作しません。注意が必要です。

これで1時間ごとにhtmlファイルが開かれて自動フォロー・自動いいねできれば成功です。

終わりに

Chrome拡張機能でInstagramの自動フォロー・自動いいねを定期的に実行する方法をご紹介しました。3つのChrome拡張機能を利用して、インスタの自動化を達成できます。RPA操作は安定させるのは難しい方法ですが、汎用的な手法です。いろいろなことに応用ができます。
GPUを無料で利用できるGoogle Colaboratoryを定期実行する方法もご紹介していますので、よろしければ併せてお読みください。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[AIがAIに指示 Google Colabで音楽を作成してみた]]> https://algo-ai.work/?p=1799 2023-01-12T00:07:09Z 2023-01-11T18:18:00Z text to musicでチャットGPTがどんな音楽を生み出す指示をできるか提案して音楽を作ってみました。最近、text to imageから派生して様々なAIが登場しています。text to musicは3つのタグ情報から音楽を生成するものです。このタグ情報をベースに音楽を生成するため、まずはベースとなる文章をチャットGPTに作成してもらい、その文章をベースにタグ情報を決定し、音楽を生成しました。チャットGPTはopen aiが提供しており、マイクロソフトのbingでググル代わりに使われる可能性もある次世代のAIです。AI時代が楽しみで、先駆けて触ってみました。

AIにカフェっぽい曲を聞いてみた

「AIにカフェっぽい曲」を訪ねて、具体的な英文を教えてもらいました。Slackでopen AIのAPIを使い質問しました。チャットGPTに日本語対応、高速化して対応をしてもらえます。下記の記事でSlackでチャットGPTを使う方法を紹介していますのでよろしければお読みください。

SlackでチャットGPTに確認しました。

和訳すると、以下の通りです。
“カフェのようなトラックは、メローで軽く、優しいと表現することができます。通常、シンプルで繰り返しのあるメロディーを持つ、なだめるようなリラックスした雰囲気の曲です。カフェのような雰囲気を出すには、アコースティックギター、軽いシンセパッド、ビブラフォン、軽いドラムなどの楽器が考えられます。トラックは、あまり忙しく慌ただしくなく、ゆったりとしたチルな感じで、少しグルーブ感がありつつも、それほどでもないものになるでしょう。カフェの雰囲気をほのめかすような、微妙なジャズの要素を含んだビンテージな雰囲気を醸し出すことができるだろう。”

ゆったりとした軽い音楽を具体的に教えてくれました。今回は、この文字をそのままインプットの文字列として、音楽生成します。

text to music 「mubert」

text to imageが流行していますが、text to musicが作り出されています。テキストからミュージックを作り出すことができます。mubertでは3つのタグ情報を指定すると音楽を生成することができます。

よろしければお試しください。

Mubert APIを使って、get_track_by_tagsにより文章から3つのタグ情報を決定します。Google Colabでコードが公開されていました。promptにチャットGPTが出力してくれた文字をコピペして実行してみました。

音楽を生成

PromptにチャットGPTが出力した文字を入力し実行しました。

カフェっぽい曲のTagsは以下の3つでした。

  • jazz / funk
  • electro funk
  • sleepy ambient

この3つのタグから音楽を生成しました。durationは60秒です。

終わりに

チャットGPTでカフェっぽい曲を具体的にし、3のタグ情報に変換して存在しない音楽を生成してみました。音楽を実際に聴く限りは、text to musicはまだ発展途上だと思いますがすごい可能性だと思います。MIDIや歌詞連携を自動化し、NEUTORINOなどと連携して、スムーズにボーカロイドが歌うなど、自動化を発展させると統合的な音楽自動生成環境を作れると思います。これからの音楽自動生成の世界も楽しみですね。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[M1 MACでwaifuを使ってみる]]> https://algo-ai.work/?p=1970 2023-01-20T07:40:48Z 2023-01-08T10:00:00Z M1 MACでプログラム無しで簡単にWaifuを使う方法をご紹介します。Waifuは画像生成AIモデルの二次元絵に特化したモデルです。難しいことなく簡単に使う方法がありますのでご紹介します。Diffusion Stableでカスタムモデルを指定することで、GUIで簡単に使えます。

Diffusion Beeのインストール

Diffusion Beeのインストール方法は過去の記事でご紹介しています。カスタムモデルを使う方法までご紹介しています。今回はWAIFUを選択して使います。

モデルのダウンロード

WAIFUのckptファイルは以下にあります。

ckptファイルを選択して、ダウンロードします。このckptファイルがAIのモデルになります。WAIFU以外にもたくさんのckptファイルが公開されています。

WAIFUを選択する

Diffusion Beを起動して、右上の三本線をクリックしてSettingを選びます。Settingの中でCustom Models欄がありますので、Add New Modelをクリックして、先ほどダウンロードしたckptファイルを選択すれば、簡単にWAIFUを試すことができます。

Generateボタンを押すと、画像が作成できました。

モデルの一覧

CKPTファイルの一覧です。Stable DiffusionがOSSなため、これだけ民主化されているとすごいですね。数年でAIがどう発展するかが楽しみです。

  1. Stable Diffusion 1.5 Stability AI’s official release.
  2. Pulp Art Diffusion Based on a diverse set of “pulps” between 1930 to 1960.
  3. Analog Diffusion Based on a diverse set of analog photographs.
  4. Dreamlike Diffusion Fine tuned on high quality art, made by dreamlike.art.
  5. Openjourney Fine tuned model on Midjourney images.
  6. Amphibia Diffusion Based on Disney’s cartoon series.
  7. Arcane Styled after Riot’s League of Legends Netflix animation.
  8. Disco Elysium Styled after ZA/UM’s open RPG.
  9. Elden Ring Styled after Bandai Namco’s popular RPG.
  10. Spiderman: Into the Spiderverse Styled after Sony’s movie.
  11. Archer Styled after FX’s animated comedy.
  12. Red Shift Styled after high resolution 3D artworks.
  13. Classic Animation Disney Trained on screenshots from classic Disney.
  14. Modern Disney Styled after Disney’s more recent animations.
  15. Jinx Based on the character in Arcane.
  16. Vi Based on the character in Arcane.
  17. Cyberpunk 2077 Styled on the CD Projekt Red’s animation.
  18. Pixel Sprite Sheet Generator Generates Sprite Sheets to animate.
  19. Pixel Art V1 Self Explanatory.
  20. Pixel Landscapes Pixelated landscapes.
  21. All in one Pixel Art Both Pixel Art v1 and Landscapes combined.
  22. Micro Worlds An environment prompt on a square tile.
  23. Borderlands Styled after Gearbox’s Looter Shooter.
  24. App Icons Self Explanatory.
  25. Robo Diffusion Creates cool looking robots.
  26. Cyberware Mechanical body parts or objects.
  27. Mona Based on the character from Genshin Impact RPG.
  28. Starsector Portraits from Fractal Softworks game.
  29. Comic Diffusion Western Comic style (OP’s post for guidance)
  30. Cenobite Model Halloween mask style.
  31. Sorrentino Diffusion Art style by Andrea Sorrentino.
  32. Papercut Paper craft style.
  33. JWST Deep Space Style on photos from James Webb Space Telescope and Judy Schmidt.
  34. Rotoscopee Styles from A Scanner Darkly) movie, Undone tv series), Tehran Taboo movie.
  35. Voxel Art
  36. Double Exposure Diffusion v1 & v2
  37. Supermarionation Based on Gerry Anderson’s stop motion movie.

終わりに

M1 Macで簡単にWAIFUを使う方法をご紹介しました。テキストを入力してボタンをクリックするだけでWAIFUを使えるので簡単ですね。AI画像集を作成しています。世に存在しない絵を描いています。興味がある方は是非見てください。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[チャットGPTでブログ記事を書いてみる]]> https://algo-ai.work/?p=1789 2023-02-01T01:14:15Z 2023-01-01T16:16:00Z GPT-3でブログ記事を自動生成します。GPT-3は優秀なチャットであると人気になっています。今回はチャットGPTにブログ記事を書かせてみました。最近はAIを上手に使えるようになることが次世代の人材に必要な能力となってきていると感じています。特にGPT-3は発想に秀でており、発想という役割をチャットに持っていくやり方が、次世代AIをチャンスに変えるやり方だと思います。

AIにどんなブログ記事を書くとよいか聞いてみた

まずはどんなブログ記事を書いたらよいか聞いてみました。人は質問するだけですね。

どんなブログ記事を書いたらよいと思うか聞いてみたところ以下の回答が返ってきました。

「あなたの興味や趣味に応じて、お気に入りのブログ記事を書きましょう。特定のテーマについて詳しく調べて書くのもいいでしょう。プログラミング、美容、旅行、ファッションなど、興味のある分野について書くのもよいでしょう。また、コメントを書いてさらに自分の記事を共有できるようにするのもよいです。ビジネスに関して記事を書くのもいいでしょう。自分の経験を共有したり、知識的な記事を書いてコミュニティに貢献したりすることもできます。」

まだ抽象的なので、AIに具体化させていきましょう。単語のピックアップは人間がやります。
発想はいっぱい出てきていますね。今回は、ファッションについて聞いてみます。

ファッションの具体性を聞いてみると以下の回答が返ってきました。

「おすすめのファッションアイテムや、最新のファッショントレンドについての記事、洋服のコーディネート方法などを中心に書くとよいでしょう。合わせるアクセサリーやインナーウェアなど、色々な細かいことを扱った記事も投稿すると、記事自体やコンテンツのバリエーションが広がって、読者を引きつけられます。」

少し具体的になってきましたね。

では、AIが提案してくれた、洋服のコーディネート方法をアクセサリー、インナーウェアー、バリエーションに注目します。5セクションで1000字以上のブログ記事を書いてもらうようにお願いしてみます。

ブログ記事

AIに洋服のコーディネート方法をアクセサリー、インナーウェアー、バリエーションをつけて、ブログ記事を書いてもらいました。以下はAIが書いた記事です。

 第1セクション 洋服のコーディネートの基礎

洋服のコーディネートは着る人の感性で組み合わせるアートである。素材やカラーなど、さまざまなチョイスの中からより自分らしいものを見出すことが重要である。また、インナーウェアやアクセサリーなど、毎日の着こなしのみならず、特別な日の着こなしにおいても使えるものを把握しておくことが大切である。

第2セクション インナーウェアーから着こなしをスタート

インナーウェアーは服を着る人の体型や性格によっていくつかのバリエーションがある。例えば夏場はホワイトやブルーなど涼しい色合いのタンクトップやキャミソールがよく、冬場は厚手のセーターなどを着用すると身体を保温したり、アップデートすることができる。さまざまな素材とカラーから選ぶことで、さらに雰囲気を変えることが可能である。

第3セクション アクセサリーでパーソナライズして

アクセサリーはコーディネートを完成させる大事な要素である。首元から手首までバッグ、サングラス、小物を入れて着こなしをアップデートさせることができる。オリジナリティが求められる昨今は、デザイン性と便利性を兼ね備えたアイテムを活用して、ファッションにブレンドすることも可能である。

第4セクション バリエーションを活用して

トップスからボトムス、コート、ブーツ、バックなど、様々なパーツでが a コーディネートを組み合わせることができる。色、柄、素材といった種類から変化のある組み合わせを考えると、春から秋までの様々なシーズンで同じ服を活用することが可能となる。季節の変わり目をしっかりと考慮して、売れ筋の洋服をバリエーション活用することで、理想のコーディネートを完成させることができる。

第5セクション 締め括り

洋服のコーディネートにはインナーウェアー、アクセサリー、バリエーションを活用することで完成度の高い装いをすることが可能である。着こなしを印象的に組み上げるためには、トレンドを用いることで自分なりの感性でアートのようなコーディネートを実践することができる。日々の着物選びを楽しむためにも着る人特有のチョイスを活用することで、よりハイクオリティのコーディネートを実現させるのが重要である。

終わりに

今回はAIでブログ記事を書いてみました。内容はその通りだと共感できることも多く、人が描くのと遜色ないレベルで記事が書けていると思います。この記事を骨に少しブラッシュアップして、画像も足せばファッションの記事をしっかり書けるのではないかと思います。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[チャットGPTを日本語対応・チャット精度向上]]> https://algo-ai.work/?p=1709 2023-02-02T01:10:28Z 2022-12-28T16:05:00Z チャットGPTが日本語に対応しなくなってしまいましたので、日本語対応して使う方法をご紹介します。
方法は2段階でOpenAIのAPIを使うこと、さらに応答精度を上げるためにGoogle Apps ScriptでGoogle APIにより翻訳を通して使う方法をご紹介します。チャットGPTは英語のデータをメインに作られているAIです。
当たり前ですが、日本語で使っても精度は英語より劣ります。

Open AIのチャットGPT

チャットGPTは元データから学習をしていて、その情報をもとに回答しています。そのため、日本語と英語でどちらの方が元データの質が高いかが重要になってきていると思います。AIを作っているのは日本の会社ではないことからもわかるよう、英語で質問して英語で解答をもらった方が精度が高くなると考えられますよね?そのため、日本語を英訳して、英訳した文字でチャットGPTに質問し、英語で応答をもらい、その応答を日本語訳することで、精度を高めることができます。翻訳はGoogle翻訳やDeepLが有名ですので、他のアプリを挟む仕組みを作ることで、日本語を使いつつ精度の高いチャットGPTを使うことができます。

LineでチャットGPTを利用する方法

OpenAIのAPIを使って、Google Apps ScriptでLINEに対応させることで、日本語に対応したAIを利用することができます。無料で試すことができます。LINEのビジネスアカウントを払い出し、Google Apps Scriptで簡単なスクリプトを記載して、連携して対応させると便利に使えます。LINEで使えるとググる感覚で気軽に使えて便利ですよね。
詳細は以下の記事でご紹介していますので是非お試しください。
加えて、このページのGoogle Apps Scriptで翻訳するをお読みいただき、翻訳APIを追加で利用することで精度の高いチャット機能をお試しできます。

SlackでチャットGPTを利用する方法

OpenAIのAPIを使って、Google Apps ScriptでSlackに対応させることで、チームで簡単に触ることができるようになり、かつ、日本語でも対応することができます。
Slackに組み込むことができれば、チームで気軽に触ることができて便利ですよね。
詳細は以下の記事でご紹介していますので是非ご確認ください。
加えて、このページのGoogle Apps Scriptで翻訳するをお読みいただき、翻訳APIを追加で利用することで精度の高いチャット機能をお試しできます。

Google Apps Scriptで翻訳する

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を使う方は是非試してみてください。

]]>
0
algo-ai <![CDATA[チャットGPTでDiffusion Stableに絵を描かせてみた]]> https://algo-ai.work/?p=1741 2023-01-09T23:35:44Z 2022-12-28T14:22:06Z 最近はAIの発展が著しいです。
流行りのチャットGPTでDiffusion Stableに絵を描かせる指示を出させて、絵を描かせて遊んでみました。
AIでAIに指示を出させてみるといった使い方が今後も流行っていくと思います。

AIに仕事納めっぽい絵を聞いてみる

仕事納めっぽい絵って思いつかなかったので、チャットGPTに仕事納めっぽい絵はどんなものがあるか聞いてみました。
4つも案を挙げてくれました!
 ・時計を止めるような絵
 ・パンを焼くような絵
 ・手を合わせて祈りのポーズ
 ・旅行したいと思って出かけるいろんな人の姿

思いつきもしない答えが返ってきました。面白いですね。

具体性を質問してみる

時計を止めるような絵とは?と思い、
1つ目の時計を止めるような絵を具体的に質問し、併せてDiffusion Stableに書かせる英文を作るよう指示しました。すごい。長い英文が返ってきました。

英文を和訳するとこちらの通りです。

“この絵には、黒いドレスを着た若い女性が、時計台のそばに脚を広げて、地平線を見つめてストイックに立っている姿が描かれています。彼女の顔は決意の仮面であり、両手で時計台の側面を掴んでいる。荒涼とした風景を舞台に、彼女の決意に満ちた視線が闇に包まれるように、片手はゆっくりと時計台の上に伸びていく。彼女の姿勢は、その瞬間だけでなく、より大きな、包括的な物語の中で、彼女が隠喩的に時間を超越した空間にいることを暗示している。彼女は時間の流れに果敢に抵抗し、どのような形であれ、それを食い止めようとしているのです。”

必死に時を止めようとする女性の姿が思い浮かぶ具体的な内容です。
今年を終わらせたくない女性のようですね。興味深い発想。

チャットは、slackでチャットGPTを使っていますので、遊びたい方は是非こちらもご確認ください。

Diffusion Stableに絵を描かせてみる。

AIの具体的な指示をDiffusion Stableで書かせてみました。
「仕事納めっぽい絵」が「時計を止めるような絵」となり、この世の終わりのような絵ができています。

M1 MACでDiffusion Beeを使って書いてみました。
同じように絵を描きたい方はこちらの記事をどうぞ!

終わりに

仕事納めっぽいという言葉から、AIがAIを扱う具体的な指示を出すまで、人が少し補助するだけで絵が描けるのは面白いですね。
今後はAIがさらに階層化して、AIがAIを指示して、その指示でAIがAIを操作するような、階層型のAI操作で芸術が生まれるかも知れません。様々なものが出来上がっていく世の中になるのだと思います。
ここ数年はAIの発展に注目ですね。

よろしければTwitterフォローしてください。

]]>
0
algo-ai <![CDATA[チャットGPTが遅い、エラーする]]> https://algo-ai.work/?p=1698 2023-02-03T08:58:41Z 2022-12-28T04:52:55Z チャットGPTのWeb版を使うとネットワークエラーや遅いことがあります。LineやSlackで気軽に使えて、一括で回答をもらえる方法をご紹介します。チャットGPTでは質問をしてから少しずつ文字が表示されますが、一括で回答をもらいたいという方は是非こちらの記事を読んでみてください。

Open AIのAPIを使う

Open AIのAPIを使うことで一括で質問の応答を得ることができます。LineやSlackでチャットGPTを使えるようになることで、気軽に速く動かすことができます。そのために、Open AIのAPIキーを取得して、LineやSlackのアプリをGoogle Apps Scriptで便利に使えるようにします。

Lineに対応させる

OpenAIのAPIを使って、Google Apps ScriptでLINEに対応させることで、気軽にかつ一括で返答の回答を受けとれるようになります。無料で実践できます。LINEのビジネスアカウントを払い出し、Google Apps Scriptで簡単なスクリプトを記載して、GASとLINEを連携して対応させると便利に使えます。LINEで使えるとググる感覚で気軽に使えて便利ですよね。
詳細は以下の記事でご紹介していますので是非お読みください。

Slackに対応させる

OpenAIのAPIを使って、Google Apps ScriptでSlackに対応させることで、チームで簡単にチャットGPTを触ることができるようになり、かつ、一括で返答の回答を受けとることができます。
無料で実践することが可能です。Slackに組み込むことができれば、チームで気軽に触ることができて便利ですよね。
詳細は以下の記事でご紹介していますので是非ご確認ください。

チャットGPTでブログを書いてみる

エラーや遅いことを可決する以外に、チャットGPTで生産物を出すことを試しています。その1つとして、チャットGPTでブログ記事を描いてみることです。ブログ記事を描いてみた結果をご紹介しております。

チャットGPTでDiffusion Stableに絵を描いてもらう

チャットGPTで文字から画像を作り出すことのできるDiffusion Stableのインプットになる文字を出力し、Diffusion Stableで実際に画像を作り出すことを試しました。○○っぽいものを具体的に聞いていくことで、具体的な文字を出力し画像を作り出しています。これからはAIとAIを繋ぐことを人が行い、アウトプットを出していけると面白いと思います。興味がある方ほこちらの記事も是非お読みください。

終わりに

チャットGPTを簡単に触れる記事をご紹介させていただきました。LINEやSlackに組み込み最新のAIのチャットボットを触ることができると、何かと捗りますよね。特にLine対応では英語での話し相手としても使え、AIで英語の勉強もできて便利です。次世代の発展技術となるAIを利用して、時代を先取りしていきましょう。

]]>
0
algo-ai <![CDATA[チャットGPTをslackで使えるようにする]]> https://algo-ai.work/?p=1607 2023-01-31T06:30:55Z 2022-12-24T16:46:00Z 賢すぎるチャットbotとして、チャットGPTが話題になっています。気軽に業務に活かせるように、slackで実装する方法をご紹介します。
slackで相談できればチームの業務も捗ること間違い無しですね。

内容

・OpenAIのAPIキーの取得方法
・Google Apps Script(GAS)のスクリプト
・Slackのappを作る

OpenAIのAPIキーの取得方法

OpenAIのAPIキーを取得して、サーバ側のスクリプト作成の準備をしましょう。

以下でSign upしてログインします。Google Accountでも登録できます。

ログインして、Create New Seacret Keyをクリックし、API用のキーを取得します。
これでスクリプト作成の準備完了です。

Google Apps Script(GAS)のスクリプト

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のappを作る

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を使う方法も記事にしています。
興味がある方は併せて読んでくださいね。

]]>
0
algo-ai <![CDATA[チャットGPTをLINEで使えるようにする]]> https://algo-ai.work/?p=1561 2023-01-14T14:20:15Z 2022-12-19T09:54:17Z 賢すぎるチャットbotとして、チャットGPTが話題になっています。気軽に触れるようにLINEで実装する方法をご紹介します。
LINEで相談できればいつでも何でもチャットbotに相談できますね。自身はLINEに実装してググる感覚で気軽に使っています。
久々にLINEのアクセストークンを取得しようとしたら、ページ遷移が変わっていましたので、最新のLINEのページでのアクセストークン取得方法もご紹介します。

内容

・LINE Bussinessのアクセストークン、シークレットトークンの取得方法
・OpenAIのAPIキーの取得方法
・Google Apps Script(GAS)のスクリプト

LINE Bussinessのアクセストークン、シークレットトークンの取得方法

LIne Bussinessに登録してログインします。

作成をクリックして、新しいBOTを作成します。
同意して、アカウントを作成し、プロバイダを作成します。

チャットをクリックします。Webhookの設定を行います。

チャットタブをクリックして、「Messaging APIの設定画面を開く」をクリックします。

Webhook URLには、後でGASでスクリプトを作成してDeployしたサーバのURLを記載します。
このLINEアカウントがメッセージを受信したときに、このサーバのURLに受信したメッセージをdoPost関数に送ることできます。

Line Developpersのリンクをクリックします。

コンソールをクリックして、作成したプロバイダを選択し、Messaging API設定タブをクリックします。

チャンネルアクセストークンを発行します。
このアクセストークンはスクリプトで使いますので控えておきましょう。
これは、サーバ側からLINEにメッセージをreply(返信)するときに使います。
また、応答設定ではチャットをオフにし、Webhookをオンにしておきましょう。

OpenAIのAPIキーの取得方法

OpenAIのAPIキーを取得して、サーバ側のスクリプト作成の準備をしましょう。

以下でSign upしてログインします。Google Accountでも登録できます。

ログインして、Create New Seacret Keyをクリックし、API用のキーを取得します。
これでスクリプト作成の準備完了です。

Google Apps Script(GAS)のスクリプト

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を使いこなす能力があれば、十分コードが書けてしまいますね。ググる感覚で気軽に使えるのも凄い良いです。

]]>
0
algo-ai <![CDATA[Diffusion Beeでカスタムモデルを使ってM1 MACで簡単に絵を描く]]> https://algo-ai.work/?p=1502 2023-02-20T02:30:29Z 2022-12-17T16:00:00Z Diffuson StableがOSSになりOSSの民主化が進んでいると話題になっています。
自宅のPCはM1 MACでIntel製のCPUではないため、M1に適したものを探したところDiffusion Beeというものがありました。簡単にインストールできて、数十秒で絵を描けるものであり、想像以上によかったのでご紹介いたします。

内容

・Diffusion Beeのインストール方法
・Diffusion Beeの使い方
・Diffusion Beeに新たなモデルを追加する方法

Diffusion Beeのインストール方法

Diffusion Beeのインストール方法をご紹介します。
Diffusin BeeのWebサイトにアクセスして、dmgファイルをダウンロードしインストールします。
通常のアプリケーションを利用するのと同じで、プログラムを作ることなく簡単に試せるので素晴らしいです。
M1に特化したソフトウェアやプログラムはこのソフト以外、現状では見つけられなかったです。

以下のリンクにアクセスします。

Download for macOSをクリックします。

MacOS Apple Siliconをクリックしてdmgファイルをダウンロードし、ダウンロードしたファイルをインストールします。

Diffusion Beeの使い方

アプリケーションを開くとtextを入力する画面が出てきます。ここに書きたい絵の呪文を入力してGenerateをクリックするだけでデフォルトのモデルで絵を描くことができます。簡単にDiffusion Stableをお試しできて、驚愕しました。
Google ColaboでもGPUで試すと数分かかったものが、M1 MACのDiffusionBeeでは数十秒で絵が描けました。
以下は、グリーンの上の白い犬を描いてみました。

結果は、以下のような絵が描けました。オリジナルの絵であり、実在しない犬と場所ですね。

Diffusion Beeに新たなモデルを追加する方法

独自モデルを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を作ることもできます。

]]>
0
algo-ai <![CDATA[シェルスクリプトで複数機器を利用した試験の自動化]]> https://algo-ai.work/?p=1451 2023-01-09T23:50:04Z 2021-05-10T09:32:29Z

皆さん、試験の自動化を実施していると思います。
単体ではなく複数機器を跨いだ結合試験、総合試験の自動化を行う場合、シェルスクリプトで柔軟に行うことができますので、ご紹介します。

スクリプトでログイン

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

shellスクリプトを実行

実行したい内容を記述した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で比較することで試験を自動化できると思います。

]]>
0