nodenvのnpmでインストールしたyarnからglobal addで追加したパッケージが使用できなかったときの対策

グローバルに追加したいパッケージがどうもうまく動いてくれなかったときの対応策を備忘録として残します。 このありがたい記事のおかげで助かりました。 nodenv管理下の npm で yarn を install した時に yarn の PATH が通らなかった時の対処メモ #YARN - Qiita 結論 yarn global add ...やnpm install -g ...の実行後、以下のコマンドを実行します。 nodenv rehash これで使えるようになりました。 めでたしめでたし。

7月 29, 2023 · にあえん

dbdocsでDBML管理入門してみる、あわよくばCI/CDもやる

DBML、便利ですよね。 開発初期の段階でER図の共有やSQLのエクスポートなどで非常に役立つツールです。 しかし、それは開発初期の話。 開発が進むにつれて実装とDBMLに齟齬が生じてしまうため、メンテナンスがされなくなっていってしまいます。。 今回は、DBMLの管理をローカルから行うことが可能なdbdocsというツールを見つけたので、紹介したいと思います。 dbdocs.io - Database Documentation and Catalog Tool 使い方 早速インストールしてみます。 npm install -g dbdocs (余談ですが、僕の環境ではnodenvを使用していたんですが、この-gオプションでインストールしたパッケージがうまく動かなかったので直したときの記事もあるので良ければこちらもどうぞ↓) nodenvのnpmでインストールしたyarnからglobal addで追加したパッケージが使用できなかったときの対策 無事インストールできたら、まずはdbdocsにログインしましょう。 dbdocs login Choose a login methodと表示されたので、Githubを選択するとWebブラウザに遷移するので、そこでログインを行うとトークンが発行されます。 発行されたトークンをターミナルに貼り付ければログイン完了です。 では次にdbmlファイルを実装します。 今回は簡易的にDBエンジンとしてPostgresを使用し、ユーザーテーブルのみがあるデータベースを設計しました。 Project social_blogging_site { database_type: 'PostgreSQL' } Table user { id uuid [pk] name varchar [not null] create_time timestamp [not null] update_time timestamp [not null] archive_time timestamp } これをdatabase.dbmlとして保存し、以下のコマンドを実行します。 dbdocs build database.dbml --project=test 無事作成が完了すると、以下のような画面が表示されます。 Visitに書かれているURLに遷移すると、プロジェクトページに遷移することができます。 また、画面上部のRelationをクリックすると各テーブルの依存関係を見ることができます。 これだけだと分かりづらいので、テーブルを増やしてみます。 Table weapon { id uuid [pk] name varchar [not null] } Table user_weapon { user_id uuid [ref: < user.id] weapon_id uuid [ref: < weapon.id] } 武器を追加しました。 ...

7月 29, 2023 · にあえん

AWSのAppSync is 何

SAAの模試で、DynamoDBを使用してリアルタイムデータ処理を行うWebアプリケーションの構築方法という問題で間違えてしまいました。 AppSyncを使うのが正解らしいのですが、AppSyncってなんぞ!?となったので調べました。 AppSyncとは AWS AppSync は、サーバーレスの GraphQL および Pub/Sub API を作成し、単一のエンドポイントを通じて安全にデータの照会、更新、公開を行うことで、アプリケーションの開発を簡素化します。 AWS AppSync(アプリデータをリアルタイムで保存、同期)| AWS な、なんか凄そう。 AWSAppSync開発者は、安全でサーバーレスの高性能なGraphQLおよびPub/Sub APIを使用して、アプリケーションやサービスをデータやイベントに接続できます。以下を実行すると、AWSAppSync次の操作を実行できます。 1 つの GraphQL API エンドポイントから 1 つ以上のデータソースのデータにアクセスする。 複数のソースの GraphQL API を 1 つの統合された GraphQL API に結合します。 リアルタイムのデータ更新をアプリケーションに公開します。 組み込みのセキュリティ、モニタリング、ロギング、トレースを活用し、オプションのキャッシュにより低レイテンシを実現できます。 お支払いいただくのは、API リクエストと配信されたリアルタイムメッセージに対してのみです。 AWS AppSync とは - AWS AppSync つまり、AppSyncとは「フルマネージドなGraphQLのためのサービス」と言えるでしょう。 (Pub/Sub APIというのはGraphQL WebSocketのことを言っているようです) しかしDynamoDBとAppSyncだけでGraphQLかPub/SubAPIの作成ができるのは結構すごいですね。 (DynamoDB + API Gateway + LambdaでAPI組むより遥かに楽そう) お値段は次の要素で決まるようです。 クエリとデータ変更操作 4.00USD/クエリおよびデータ変更操作 100 万回 リアルタイム更新 2.00USD/リアルタイムアップデート 100 万回 0.08USD/AWS AppSync サービスへの接続 100 万分 キャッシュ データ処理速度を更に加速させる 次の表の通り キャッシュで使用するインスタンスタイプの料金表 料金例は一ヶ月21.29USDとなっており、結構お手頃価格です。 ...

7月 27, 2023 · にあえん

EC2インスタンス削除時にEBSボリュームを削除させないようにする

SAA勉強中の備忘録。 EC2インスタンスの削除時にEBSボリュームの削除を行わないようにする EC2の「DeleteOnTermination」というオプションをオフにすればよいです。(デフォルトではオン) Amazon EC2 インスタンスの終了時に EBS ルートボリュームを保持する | AWS re:Post EC2の作成画面では、ボリューム設定の「終了時に削除」という項目がそれに当たります。 ボリュームの設定 感想 むしろデフォルトでオフにしてほしいが、重要なEC2インスタンスを作成する場合などは注意して設定しましょう。

7月 27, 2023 · にあえん

成功と幸福は両立しないのか

昨日妻に「成功と幸福は両立しないから、あなたは成功を捨てて家庭の幸せを取ってほしい」と言われた。 本当に両立しないのか…?と思って眠れなかったので、調べたり考えたりしました。えらい。 以下の記事が参考になりました。 「成功=幸福と考える人」が知らない本当の幸福 幸福と幸福感は違うものだという事実 | リーダーシップ・教養・資格・スキル | 東洋経済オンライン 成功と幸福とは 成功という言葉の意味について、辞書にはこうある。 1 物事を目的どおりに成し遂げること。「失敗は―の母」「新規事業が―をおさめる」「実験に―する」 2 物事をうまく成し遂げて、社会的地位や名声などを得ること。「写真家として―する」 成功(せいこう)とは? 意味・読み方・使い方をわかりやすく解説 - goo国語辞書 (ここで幸福と対比すべき説明は2のほうですね。) また、幸福は辞書ではこのように記載されている。 満ち足りていること。不平や不満がなく、たのしいこと。また、そのさま。しあわせ。「―を祈る」「―な人生」「―に暮らす」 幸福(こうふく)とは? 意味・読み方・使い方をわかりやすく解説 - goo国語辞書 また、先の記事内では「幸福は貢献感」と言っている。 それでは、どんな時に人は幸福であると感じられるのでしょうか。(…中略…)自分が貢献していると感じられる時です。何らかの仕方で「人の役に立てている」と感じられる時に、人は幸福でいられます。 (…中略…) たとえば、病気になって身体の自由が利かなくなることがあります。病気で身体が自由に動かせなくなった時でも、自分がなお人の役に立てていると感じられるかが問題です。そう感じられるには、何かをしないと役に立てないという考え方から離れなければなりません。 「成功=幸福と考える人」が知らない本当の幸福 幸福と幸福感は違うものだという事実 | リーダーシップ・教養・資格・スキル | 東洋経済オンライン 定義からこの記事のタイトルを少し修正すると、「社会的地位や名声などを得ることと、貢献感は両立しない」となる。 まぁ確かに一理ある。 社会的な地位は、何もしないでは得られない。 何もできなくなったら、その人の社会的な地位しか見ていない人にとっては所謂「オワコン」認定されてしまう。 一方で、どんなことがあっても「生きているだけでめっけもん」と言ってくれる存在が近くにいると、それだけで幸福を感じることができる。 また、貢献を受け入れてくれる存在は自分自身でもいい。 言い換えれば、自己肯定するということだ。 つまり、成功と認定するのは自己ではなく他者であり、幸福を認定するのは他者ではなく自己なのだ。 「あなたは成功していますか?」という問に対しては、「これだけの人が評価しています!」という実績を見せればすぐに相手は理解してくれるだろう。 「あなたは幸福ですか?」という問の答えは、自分自身の中にしか無いので、答えたところで相手に伝わるかどうかは分からない。 なので、幸福について理解していればそもそもそんなことを聞く気にもならないだろう。 (大体、そんなことを聞いてくるやつはカルトか哲学者を気取ったクソ野郎なので、話す価値もないが) 自分を幸福だと認定する難しさ 「成功はしていないけど自分は幸福だ」と、言葉に出すのは簡単だろう。 ただし実際に、本当の意味で自分が幸福だと思えるかどうかとは別の話だ。 だから、趣味や好きなもので他の人と繋がりをもとうとするのだろう。 「生きていて偉い」と認めてほしいから。 それでもやはり、自分を幸福だと認められるのは自分しかいないので、少しづつでも自分を認める努力が必要だ。 ちなみに、私は以前「寝る前に自分を3つ褒める」という試みを行って自己肯定感を上げていました。 ぐっすり眠れるようになる…自己肯定感が低すぎて生き辛いOLが教える「自分で自分を褒めるコツ」 寝る前に自分を褒めると記憶に残りやすい (2ページ目) | PRESIDENT Online(プレジデントオンライン) 成功と幸福は両立しないのか では「成功と幸福は本当に両立しないのか」と言われれば、そんなこともないと思う。 まず前提として、成功と幸福はイコールではない。 ただ、分けて考えられるほど2つに相関性がないというわけでもない。 簡易的に図にしてみるとこうなるんじゃないかなと思う。 幸福は地面、成功は花 (恐ろしく下手なのはご愛嬌) これは、幸福の中に成功があるという仮説を図に表したものだ。 花には水と日光をやらねば育たないが、地面は水だけで潤う。 ...

7月 27, 2023 · にあえん

ELBのConnection Drainingとは?

SAA勉強中の備忘録。 ELBにある機能の一つであるConnection Drainingがピンとこなかったので。 Connection Drainingとは 登録解除された、もしくは異常のあるターゲットに対するリクエストを切断するまでの待機時間を設定する機能です。 1 - 3600秒(1時間)まで選択でき、デフォルトでは300秒になっています。 既存のリクエストを完了させ、待機時間中は新規リクエストを対象のターゲットには送らないようにすることで、唐突なリクエストの切断といった事象を防ぎます。 【AWS】Connection Draining を使ってELB から安全にEC2 を切り離す|SAYJOY blog また、この機能はCLB特有の機能です。 ALB、NLBの場合は「Deregistration Delay」という機能がこれと同等の機能を有しています。 Application Load Balancer のターゲットグループ - Elastic Load Balancing 参考 ELB Connection Draining – Remove Instances From Service With Care | AWS News Blog

7月 24, 2023 · にあえん

【EC2】オンデマンドキャパシティ予約について

SAA勉強の備忘録。 オンデマンドキャパシティ予約とは EC2インスタンスを起動するのに必要な領域を予約する機能です。 キャパシティーの予約 の作成 - Amazon Elastic Compute Cloud これをしないと、「InsufficientInstanceCapacity」というエラーでインスタンスが起動できないことがあるため、注意が必要です。 EC2 インスタンスの開始時または起動時の InsufficientInstanceCapacity エラーを解決する | AWS re:Post また、セットで語られるのが多い機能として「リザーブドインスタンス」と「Saving Plans」があります。 ただしこの2つとオンデマンドキャパシティ予約を同様のものとしてはいけません。 「リザーブドインスタンス」「Saving Plans」は、1年もしくは3年という単位でコンピュータリソースを購入する際の割引プランというふうに思ってください。 また、かつてEC2には、スケジュールドリザーブドインスタンスというものがありました。 これは、予め指定した時間に起動できるEC2インスタンスを1年間継続的に使用するための機能です。 1年間インスタンスが使用可能になる分、オンデマンドより柔軟性はなくなりますが、その代わり割引しますよ、というものです。 Amazon EC2 の請求および購入オプション - Amazon Elastic Compute Cloud ただし、現在は使用できなくなっています。 リザーブドインスタンスとは オンデマンドインスタンスと比較して、割引を適用できる機能です。 Amazon EC2 のリザーブドインスタンスの概要 - Amazon Elastic Compute Cloud リザーブドインスタンスの適用範囲として、以下の2種類があります。 リージョンリザーブドインスタンス リージョン内で1年または3年単位のコミットメントが必要で、長いほど割引率が高い キャパシティ予約なし 指定リージョンのすべてのAZで割引が適用される ゾーンリザーブドインスタンス AZ内で1年または3年単位のコミットメントが必要で、長いほど割引率が高い キャパシティ予約あり また、リザーブドインスタンスには「スタンダード」クラスと「コンバーティブル」クラスが存在します。 これらは提供クラスと呼ばれ、コンバーティブルの場合は購入後でも「インスタンスファミリー、インスタンスタイプ、OS、テナンシー」の要素を変更可能になります。 リージョンリザーブドインスタンスの購入画面 ゾーンリザーブドインスタンスの購入画面 購入画面を見るとわかりますが、やはりコンバーティブルのほうが高いです。 Saving Plansとは こちらも同じく、コンピュータリソースの予約をすることで割引してくれる機能です。 クラウドコストの削減 – Savings Plans – Amazon Web Services ただし、こちらの場合はEC2以外の、LambdaやFargateなどのリソースも含めて割引の恩恵が受けられます。 ...

7月 23, 2023 · にあえん

pythonでmarkdownをplain textに変換し、ginzaで文章を文ごとにリスト化する

markdownをplain textにしたうえで、その文章をginzaでリスト化しました。 必要なライブラリをインストールします。 pip install Markdown beautifulsoup4 ginza ja-ginza 以下のような実装を行いました。 from bs4 import BeautifulSoup from markdown import markdown import re import spacy def markdown_to_text(markdown_string): """マークダウンを平文に変換します""" # md -> html -> text since BeautifulSoup can extract text cleanly html = markdown(markdown_string) # remove code snippets html = re.sub(r'<pre>(.*?)</pre>', ' ', html) html = re.sub(r'<code>(.*?)</code >', ' ', html) # extract text soup = BeautifulSoup(html, "html.parser") text = ''.join(soup.find_all(string=True)).replace("\n", " ") return text def split_sentences(text): nlp = spacy.load('ja_ginza') doc = nlp(text) sentences = [sent.text for sent in doc.sents] return sentences if __name__ == "__main__": markdown_string = """# タイトル ## サブタイトル これは段落です。 これは別の段落です。 """ text = markdown_to_text(markdown_string) print(text) sentences = split_sentences(text) print(sentences) 出力は以下のとおりです。 ...

7月 19, 2023 · にあえん

hugoのショートコードで目次を生成した〜〜〜い

一部の記事がかなりの分量になってしまい、目次が設定したかったので設定したときの備忘録。 どうやるか まず、目次に関するテンプレートは公式で既に用意されていました。 TableOfContents | Hugo なるほど、{{ .TableOfContents }}で参照すればいいみたいです。 なので、めちゃくちゃシンプルに目次を表示したいだけだった僕は以下のようなショートコードを実装しました。 {{ .TableOfContents }} この実装をtoc.htmlとして保存し、マークダウンからショートコードで参照してみましたが、hugo serveするとエラーが発生しました。 Rebuild failed: executing "shortcodes/toc.html" at <.TableOfContents>: can't evaluate field TableOfContents in type *hugolib.ShortcodeWithPage 調べてみたら、どうやらショートコードからは{{ .Page.TableOfContents }}と参照するのが正しい模様。 Hugoでドキュメント作るときに手っ取り早く痒いところに手が届くようになるTips #Hugo - Qiita 修正したら使用できるようになりました。 .Pageをつけなければいけない理由がいまいちよくわからないまま終わってしまったので、もし分かる人がいればコメントお願いします。。

7月 15, 2023 · にあえん

hugoのショートコード(shortcode)でリンク先のタイトルを自動取得する

このブログはhugoを使って作成しています。 Hugoの何がいいかと言われれば、一番は静的なので軽いってところです。 ReactやVueでちょっとSPA作ろうとすると、すぐもっさりした動作になっちゃう&コンポーネント管理が大変なので、僕にはHugoが結構刺さっています。 (まぁコンポーネント管理に関してはアトミックデザインで作ろうとした僕の自業自得なんですが。。) Hugoをいろいろいじりつつ、最近の記事でも早速Hugoを活用してSEO対策などを行っていました。 その中で、ShortCodeという機能がプログラマーの僕としてはワクワクが止まらない機能だったので、ちょっと作りたいものもあったのでついでに使いつつここで紹介します。 ShortCodeとは markdownファイルから、関数などを組み込んだテンプレートHTMLを呼び出せる機能です。 デフォルトでは以下のようなshortcodeが用意されています。(詳細はこちら) figure gist highlight param ref (relref) instagram tweet vimeo youtube youtubeを表示したい場合、shortcodeを使って動画のIDを引数として渡してあげれば簡単に実装できます。 {{< youtube w7Ft2ymGmfc >}} これ以外にも自分でshortcodeを作成して、組み込むことも可能です。 shortcodeで使われる構文はGo Templateというみたいです。 参考: Go Template、最高のプログラミング言語 #go-template - Qiita URLからタイトルを取得したaタグを生成するshortcode では本題です。 (前提として、Hugoのサイトはすでに用意してあるものとします。) まずはshortcodeの実装のためのディレクトリとHTMLファイルを準備します。 mkdir layouts/shortcodes touch layouts/shortcodes/url_title.html ファイルの準備ができたら、以下のようなコードを実装します。 resources.GetRemoteを使用してリンク先のコンテンツを取得し、titleタグと組み合わせてaタグを生成するshortcodeです。 早速使ってみましょう。 {{< url_title url=“https://gohugo.io/hugo-pipes/introduction/#get-resource-with-resourcesget-and-resourcesgetremote" >}} ...

7月 11, 2023 · にあえん