
ライザとアナデンのコラボは素晴らしかったと思います!
fear戦のBGMなんか、ぶっ飛んでたよ。
もう何度も何度も聞いてます。
これはテンションが上がってしまったので、単なる感想文であったり、はたまた攻略一辺倒な記事とは一線を画すようなWebページを作りたいと強く感じました。
まず、ライザのアトリエに関する公式サイトには次のようなものがありますね。
ソースコードに関する特設ページ
ゲームの話は見出しに🎮マークを付けています。
それ以外は無印か🌟マークが付いています。
ライザとアナデンのコラボは素晴らしかったと思います!
fear戦のBGMなんか、ぶっ飛んでたよ。
もう何度も何度も聞いてます。
これはテンションが上がってしまったので、単なる感想文であったり、はたまた攻略一辺倒な記事とは一線を画すようなWebページを作りたいと強く感じました。
まず、ライザのアトリエに関する公式サイトには次のようなものがありますね。
ライザ、めっちゃ可愛いよね✨
さてさて、せっかくこのように自由にUIを実装できるプラットフォームを作っているのですから、それを最大限活かしていきましょう!
具体的には、ファンサイトの制作プロセスを公開できる「アトリエ」をここに実装します。
自分だけのプラットフォームを調合するマニュアルを公開しようかと。
「ないなら 作ればいい!」
これ、めっちゃかっこいい!
関連ページ:アナザーエデンのプログラミングを個人サイトで試す
では、ファンサイト制作に関する話題を幅広く扱いつつ、合間にライザのアトリエコラボの感想を交えつつ、書いていきますね。
このWebページを完成させた日の夜に、なんと宿星の断片が2つドロップしたのですよ。
連発ではなかったけど、宿星の断片ドロップ調査
から考えてみれば、異例の幸運と言わざる得ません。
私はライザリンシュタウトを天255にするついでに、宿星の断片がどれほどドロップするものなのか調査しています。
詳しくは上記リンク先をご覧ください。
このWebページが完成したのは2025年2月15日なのですが、この時点でライザの天は151。
宿星の断片がどれほど落ちるのか記録しつつ、255まで頑張りますよ。
加えて、ライザリンシュタウトのアクリルフィギュアを注文しています。
届くのが楽しみです!
このサイトを構成するのに必要なCSSと、プログラムの解説ページへジャンプできるリンクです。
こんな感じでソースコードを書いていけば、このレベルのWebサイトであれば個人で作ることができますよ。
今は「アナザーエデンのファンサイト」ですからアフィリエイト目的で使うのはダメです。
でも個人のサイトで楽しんで頂ける範囲であれば、リンク先のソースコードを自由に持って行ってかまいません。
リンクをタップすると、コードの解説ページへジャンプします。
カテゴリー分けしたcss
フォント構成要素
🔼All checks were completed on 20250105.
リンクをタップすると、コードの解説ページへジャンプします。
JavaScriptライブラリやツール
🔼All checks were completed on 20250105.
リンクをタップすると、コードの解説ページへジャンプします。
🔼All checks were completed on 20250105.
このタブUIはAI学習や無断転載を防ぐプログラムの小ネタ集にて実装している青色のタブUIとともに、今後もいろんなページで使えるものです。
ただ単にPython使うなら、FlaskやDjangoのほうが一般的なんだけどね。
でもそれだとWebサイトの引っ越ししたくなった時に支障が出る可能性もある。
そこで、このアプリではPythonのFlaskと静的Webサイト ─ 私はこれをプログレッシブウェブアプリにしてます ─ を共存させています。
サーバーサイドスクリプトに関する詳しい説明は、個人サイトへPythonのFlaskを導入するをご覧いただければと思います。
実際にFlaskというフレームワークで作ったWebページとなっており、ソースコードも掲示しています。
私のアプリは、次のようなディレクトリ構造になっているんだよね。
FEIN-SITES-DEV1
│ app.yaml # メインサービスの App Engine 設定ファイル(ランタイム・ルート定義など)
│ dispatch.yaml # サービス間のルーティング規則を定義するファイル
│ main.py # Flask アプリケーションのエントリポイント(ルートや動的機能の設定)
│ README.md # プロジェクトの概要や使い方を説明するドキュメント
│ requirements.txt # アプリで必要な Python パッケージ(依存関係)のリスト
├─redirect-service # リダイレクト専用サービスのディレクトリ
│ app.yaml # リダイレクト用サービスの App Engine 設定ファイル
│ redirect.py # リダイレクト処理を記述した Flask アプリケーション
│ requirements.txt # リダイレクト用サービスで必要な Python パッケージのリスト
├─static # 静的ファイルを保存するディレクトリ(CSS, JavaScript, 画像など)
│ ├─css # スタイルシート(デザイン)を格納
│ ├─js # JavaScript(インタラクションや動作制御)のスクリプトを格納
│ └─menu # メニュー関連のリソースを保存
├─templates # Flask 用の HTML テンプレートを保存
│ top.html # `/top` ルート用の動的コンテンツテンプレート
│
│ 【上側がFlaskフレームワーク。サーバーサイドスクリプトを活用した動的Webサイトです。】
│ 【下側が普通のホームぺージ。フロントエンド3言語による静的Webサイトです。】
│
└─www # 静的ウェブサイトのルートディレクトリ(主にフロントエンド用)
│ favicon.ico # ブラウザのタブに表示されるアイコン
│ index.html # 静的ウェブサイトのホームページ
│ manifest.json # PWA(Progressive Web App)の設定ファイル
│ robots.txt # 検索エンジンによるクローリング設定ファイル
│ service-worker.js # PWA 用のサービスワーカー(キャッシュ管理やオフライン対応)
├─contents # コンテンツ関連のファイルやデータを格納
├─css # 静的ウェブサイト専用のスタイルシートを保存
├─fish # 画像やリソース用ディレクトリ
├─script # フロントエンド用 JavaScript を格納
サーバーサイドスクリプトと言えば、昔はCGIと呼ばれる形で実装されていたと聞きます。
このサイトではPythonをサーバーサイドスクリプトとして活用するために、Flaskというフレームワークを導入しています。
サーバーサイドスクリプトを使用することで、ユーザーのリクエストに応じて動的にコンテンツを生成できるようになるのです。
他にもデータベース連携・セキュリティ強化・ビジネスロジックの実装・パフォーマンスの向上など、メリットが大きいんだよ。
全てのページの下部から、ジャンプできるようになっています。
単なるサイトマップじゃなくて、サーバーサイドスクリプトのソースコードマニュアル付きです。
私の開発環境は「ビジュアル アトリエ コード」です🎨✨
なーんて、半分冗談なんだけどね。
でもAtelierとStudioは同じような意味だから、言語が混ざっているだけで通りますよ。
実際はVisual Studio Codeをカスタマイズしただけです。
リアルの私は錬金術を使えないので、せめてWeb制作でライザごっこをしてみようかと!
ゲームのファンサイトに限らず、Webサイト制作に使うのは HTML・CSS・JavaScript だけではありません。
手元の運用の工夫だったり、ソースコードの管理やバックアップ、コードエディターのカスタマイズなどなど。
工夫すればするほど楽しく手間をかけず、そしてお金もかけずに楽しめます。
□をタップすると✅に変化します。
手書きコードによるWebサイトは煩雑になりがちです。
でも手作業を回避しつつパターン化すれば、漏れなく作っていけますね。
新しいページを作成する
🌟フェイタルドライブの「ヘブンズクエーサー」をキメる!!🌟
じゃなくて…
起動したGoogle Cloud SDK Shell で gcloud app deploy を実行 → 公開する!
GitHubによるコード管理
GitHubのリポジトリに「fein write...」メッセージを添えつつ、ソースコードをステージ(Stage Changes)→コミット(Commit)→プッシュ(Push)する。
参考ページ👉 Webサイトの共同制作とGitHub
基礎デザインを作っているstyle.css
下部の「CSS elements」をタップすると、コード全体をチェックできます。
🔼All checks were completed on 20250104.
HTMLコードの解説はここではしませんが、どこのページでも使う部品のようなコードはあります。
そういうのは1カ所にまとめておくと、ページ作成の手間を大幅に削減できます。
頻用するHTMLコード
<!--コードを記載する時の枠-->
<div class="code-container">
<pre><code class="language-html">
</code></pre>
</div>
<!--通常サイズの画像とテキスト回り込み-->
<div class="content">
<img src="Atelier.jpg" alt="Illustration of the atelier" class="graphic right-image fade-in-out">
</div>
<!--ミニサイズの画像とテキスト回り込み-->
<div class="content">
<img src="Atelier.jpg" alt="Illustration of the atelier" class="graphicmini right-image fade-in-out">
</div>
<!--縦長の画像とテキスト回り込み-->
<div class="content">
<img src="wallpaper.jpg" alt="wallpaper" class="wallpaper right-image fade-in-out">
</div>
<!--ストレートに画像を掲載し、テキストの回り込みを行わない-->
<img src="Atelier.jpg" alt="Illustration of the atelier" class="graphic fade-in-out">
<!--大きな画像を掲載し、テキストの回り込みを行わない-->
<div class="content">
<img src="Atelier.png" alt="Illustration of the atelier" class="biggraphic fade-in-out">
</div>
<!--草花の写真を飾る-->
<div class="flowerclearfix">
<div class="flowerfade-out">
<img src="/flower0/flower0(number).JPG" alt="フェードアウト効果の草花写真">
</div>
</div>
<!--定義リストを作成する-->
<dl>
<dt>HTML</dt>
<dd>HyperText Markup Languageの略。Webページを作成するための言語。</dd>
<dt>CSS</dt>
<dd>Cascading Style Sheetsの略。HTML要素の見た目を整えるためのスタイルシート言語。</dd>
<dt>JavaScript</dt>
<dd>Webページに動的な動作を追加するためのプログラミング言語。</dd>
</dl>
<!--本文中にコードを記載する場合に使う-->
<span class="codecolor">code & programming</span>
<!--小さめのオレンジテキスト-->
<span class="small-orange-text">orange text</span>
<!--小さいテキスト-->
<span class="small-text">small text</span>
ここではVisual Studio Codeの設定ファイルについて書いています。
settings.json
Visual Studio CodeはMicrosoftのコードエディターですが、拡張機能のインストールと設定ファイルの記述で背景画像を付けられます。
settings.jsonはVS Codeの設定ファイルです。
Windowsなら多くの場合、C:\Users\ユーザー名\AppData\Roaming\Code\User\settings.json という位置にあると思います。
ここの編集が必要なんだよね。
その他、拡張機能などの解説はVisual Studio Codeを触ってみようをご覧ください。
今回、自分の開発環境でライザごっこをするにあたり、次のようにコードを編集しました。
Visual Studio(Atelier) Codeのsettings.json
{
"extensions.ignoreRecommendations": true,
"editor.fontFamily": "'Yu Gothic UI', 'Courier New', monospace",
"workbench.settings.applyToAllProfiles": [
"editor.fontFamily"
],
"editor.fontLigatures": false,
"editor.wordWrap": "on",
"files.insertFinalNewline": true,
"editor.formatOnSave": true,
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
"breadcrumbs.enabled": true,
"workbench.tree.renderIndentGuides": "always",
"editor.tabSize": 1,
"editor.insertSpaces": true,
"editor.autoIndent": "none",
"editor.detectIndentation": false,
"background.fullscreen": {
"images": [
"file:///C:/Users/ユーザー名/OneDrive/_fein/reisalinstout.jpg"
],
"opacity": 0.1,
"size": "900 900",
"position": "center",
"interval": 0
},
"terminal.integrated.fontFamily": "monospace",
"git.openRepositoryInParentFolders": "never",
"vscode-edge-devtools.webhintInstallNotification": true,
"terminal.integrated.fontSize": 14,
"terminal.integrated.defaultProfile.windows": "Command Prompt"
}
普段使いするツールの設定ファイルだから、コメントアウトは付けていないです。
このコードの説明はsettings.jsonのコード例にあります。
参考サイト一覧
CSS elements
中心となるスタイルシートはちゃんと管理しないとグチャグチャになりがちです。
特に私は何でも放り込む悪い癖があるし、長くなりがちなコードは順次逃がすようにしていますね。
まずは本体のcssではない写しでコードを管理し、問題が発生しなければ本番環境へ貼り付けています。
基礎デザインを作っているstyle.css
/* ★文字コードをutf-8とする */
@charset "UTF-8";
/* ★bodyを綺麗に整える */
body {
font-family: 'Lato', 'Noto Sans JP', sans-serif;
font-size: 15px;
font-weight: 400;
font-style: normal;
overflow: auto;
margin: 10px;
padding: 0;
border-radius: 20px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.8);
background-color: white;
}
/* ★レスポンシブデザイン */
.feincontainer {
width: 90%;
margin: 0 auto;
box-sizing: border-box;
}
@media (max-width: 600px) {
.feincontainer {
font-size: 0.875em;
padding: 10px 0;
}
.responsive-iframe {
width: 100%;
height: calc(100vh - 20px);
}
}
@media (min-width: 601px) {
.feincontainer {
width: 100%;
max-width: 1200px;
padding: 20px 150px;
}
.responsive-iframe {
width: 80%;
height: 80vh;
}
}
/* ★箇条書きの余分な余白を削除する */
ul,
ol {
margin-left: 0;
padding-left: 25px;
}
/* ★手軽に余白を設定する */
div.spacer {
height: 20px;
}
/* ★太字にして定義リストを読みやすくする */
dt {
font-weight: bold;
}
dd {
margin-left: 10px;
}
/* ★立体的な付箋を描く */
p.feintag {
display: inline-block;
position: relative;
padding: .5em 1.4em .5em 1em;
background-color: rgba(255, 204, 204, 0.8);
color: #333333;
font-weight: bold;
text-align: left;
}
.right-align-container {
text-align: right;
}
.feintag::before {
position: absolute;
bottom: -1px;
right: 9px;
z-index: -1;
transform: rotate(5deg);
width: 70%;
height: 50%;
background-color: rgba(208, 208, 208, 0.6);
content: "";
filter: blur(4px);
}
/* ★統一感を持たせた見出しを作る */
h1.background-waveimage-heading {
background-image: url('../image/hone.png');
background-size: contain;
background-repeat: no-repeat;
background-position: left;
padding: 20px;
font-size: 1.7em;
}
h1.background-waveimage-heading span {
opacity: 0.7;
}
h2 {
display: block;
width: fit-content;
background: linear-gradient(to right, rgba(173, 216, 230, 0.2), rgba(173, 216, 230, 0));
padding: 10px;
border-radius: 15px;
margin-top: 30px;
margin-bottom: 5px;
}
h2.sitemap_heading {
display: block;
width: fit-content;
background: linear-gradient(to right, rgba(173, 216, 230, 0.2), rgba(173, 216, 230, 0));
padding: 10px;
border-radius: 15px;
margin-top: 10px;
margin-bottom: 5px;
}
h3 {
display: block;
width: fit-content;
background: linear-gradient(to right, rgba(173, 216, 230, 0.2), rgba(173, 216, 230, 0));
padding: 10px;
border-radius: 15px;
margin-top: 30px;
margin-bottom: 5px;
position: relative;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
h3::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 100%;
height: 3px;
background: linear-gradient(to right, rgba(255, 0, 51, 0.5), rgba(255, 255, 255, 0.5));
transform: scaleX(0);
transform-origin: bottom right;
transition: transform 0.5s ease-out;
}
h3.visible::after {
transform: scaleX(1);
transform-origin: bottom left;
}
.grastah3 {
margin-top: 0;
}
h4 {
display: block;
width: fit-content;
background: linear-gradient(to right, rgba(173, 216, 230, 0.2), rgba(173, 216, 230, 0));
padding: 10px;
border-radius: 15px;
margin-top: 30px;
margin-bottom: 0;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
/* ★h5見出しにオレンジ線を引く */
h5 {
font-size: 110%;
margin-top: 25px;
margin-bottom: 0;
padding-bottom: 5px;
line-height: 1.2;
color: rgba(0, 0, 0, 0.7);
position: relative;
display: inline-block;
}
h5::after {
content: '';
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 5px;
background: linear-gradient(90deg, #ff6f61, #ffc107);
border-radius: 2px;
}
/* ★見出しのように使う文字装飾を描く */
p.gra {
display: block;
width: fit-content;
background: linear-gradient(to bottom, rgba(255, 153, 153, 0.3), rgba(255, 255, 255, 0.3));
font-weight: bold;
padding: 10px;
border-radius: 15px;
margin-top: 30px;
}
p.codegra {
display: block;
width: fit-content;
background: linear-gradient(to bottom, rgba(153, 255, 153, 0.3), rgba(255, 255, 255, 0.3));
font-weight: bold;
padding: 10px;
border-radius: 15px;
margin-top: 30px;
}
/* ★フォントサイズやカラーを指定する */
span.small-orange-text {
font-size: 0.9em;
color: #cc3300;
}
span.small-text {
font-size: 0.8em;
}
/* ★浮かび上がる表を作る */
table {
width: 100%;
border-collapse: collapse;
}
th,
td {
border: 1px solid black;
width: 50%;
box-sizing: border-box;
border-left: none;
border-right: none;
}
tr.grasta_blue {
background-color: #e0f7fa;
}
tr.grasta_green {
background-color: #E0FFE0;
}
.boss-table th:nth-child(1),
.boss-table td:nth-child(1) {
width: 30%;
}
.boss-table th:nth-child(2),
.boss-table td:nth-child(2) {
width: 20%;
}
.boss-table th:nth-child(3),
.boss-table td:nth-child(3) {
width: 50%;
}
tr.header-blue {
background-color: #e0f7fa;
}
.weapon-table th:nth-child(1),
.weapon-table td:nth-child(1) {
width: 20%;
}
.weapon-table th:nth-child(2),
.weapon-table td:nth-child(2) {
width: 40%;
}
.weapon-table th:nth-child(3),
.weapon-table td:nth-child(3) {
width: 40%;
}
caption {
visibility: hidden;
height: 0;
overflow: hidden;
}
.custom-table-container {
display: block;
padding: 10px;
border-radius: 15px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
margin: 10px 0;
}
/* ★画像によって大きさを使い分ける */
img.biggraphic {
margin: 10px;
display: block;
width: 80%;
height: auto;
border-radius: 10px;
}
img.graphic {
margin: 10px;
display: block;
width: 50%;
height: auto;
border-radius: 10px;
}
img.graphicmini {
margin: 10px;
display: block;
width: 30%;
height: auto;
border-radius: 10px;
}
img.graphicsaki {
margin: 10px;
display: block;
width: 50%;
height: auto;
border-radius: 10px;
}
img.right-image {
float: right;
}
img.wallpaper {
margin: 10px;
display: block;
width: 40%;
height: auto;
border-radius: 10px;
}
div.content {
overflow: hidden;
}
/* ★フェードインとフェードアウトの画像アニメーション */
img.fade-in-out {
opacity: 0;
transition: opacity 1s ease-in-out;
}
img.fade-in-out.visible {
opacity: 1;
}
/* ★グラスタ表の火力20倍の話に添える画像 */
.grastaimage {
display: flex;
justify-content: space-between;
gap: 5px;
border-radius: 10px;
}
.grastaimage img {
max-width: 45%;
height: auto;
border-radius: 10px;
}
/* ★敢えて表の中に画像を入れる */
div.gtable {
display: flex;
flex-direction: column;
justify-content: flex-start;
border-radius: 10px;
}
.toptext {
margin-bottom: 10px;
}
.bottomimage {
display: block;
max-width: 80%;
height: auto;
margin: auto;
}
/* ★画像を左右に並べる */
.horizontally-container {
display: flex;
border-radius: 10px;
}
img.horizontally {
margin: 10px;
width: 30%;
height: auto;
}
/* ★サイトマップ用の目立つリンク */
.custom-link {
color: #1A73E8;
font-weight: bold;
transition: color 0.3s ease;
}
.custom-link:hover {
color: #00A2ED;
text-decoration: underline;
}
/* ★デフォルトの青に少し手を入れたリンク */
a {
color: #1A73E8;
}
a:hover {
color: #00A2ED;
}
/* ★タブを作る */
.tabs-fein {
display: flex;
border-bottom: 1px solid #ccc;
}
.tab-fein {
border: 1px solid #ccc;
padding: 10px 20px;
border-radius: 10px 10px 0 0;
background-color: rgba(173, 216, 230, 0.3);
cursor: pointer;
}
.tab-fein:not(:last-child) {
margin-right: 5px;
}
.tab-fein:hover {
background-color: rgba(173, 216, 230, 0.5);
}
.tab-fein.active {
background-color: rgba(173, 216, 230, 0.7);
font-weight: bold;
border-bottom: 3px solid #007BFF;
}
.tab-pane-fein {
position: absolute;
width: 95%;
opacity: 0;
border: 1px solid #ccc;
padding: 10px;
border-radius: 5px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
transform: translateX(-100%);
transition: transform 0.5s ease, opacity 0.5s ease;
}
.tab-pane-fein.active {
position: static;
opacity: 1;
transform: translateX(0);
}
/* ★PythonのタブUIを装飾する */
.atelier-tab {
display: inline-block;
margin: 0 5px;
padding: 10px 20px;
border: 1px solid #ccc;
cursor: pointer;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background-color: rgba(144, 238, 144, 0.5);
}
.atelier-tab-content {
display: none;
padding: 20px;
border-top: none;
border: 1px solid #ccc;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
background-color: #fff;
}
.atelier-active-tab {
background-color: rgba(144, 238, 144, 1);
}
.atelier-active-content {
display: block;
}
/* ★隅に行くほど細く消えかかる罫線を作る */
hr.atelierflower {
border: none;
height: 10px;
background: linear-gradient(to right,
rgba(107, 142, 35, 0) 0%,
rgba(107, 142, 35, 1) 20%,
rgba(34, 139, 34, 0.5) 50%,
rgba(107, 142, 35, 1) 80%,
rgba(107, 142, 35, 0) 100%);
position: relative;
background-size: 100% 100%;
border-radius: 50%;
margin: 20px 0;
}
hr.atelierflower::before {
content: "";
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 40px;
height: 40px;
background: radial-gradient(circle,
rgba(34, 139, 34, 0.5) 20%,
rgba(255, 255, 255, 0) 70%);
border-radius: 50%;
}
/* ★タップするとチェックが変化する */
.inline-button {
display: inline;
font-size: 1rem;
padding: 5px 10px;
cursor: pointer;
border: none;
background-color: transparent;
}
ライザの様子を見ていて思ったのは、Web制作と錬金術って似ている側面が多いなということなんです。
どちらも材料を組み合わせて調合し、何かしらの形を作っていきます。
何を選ぶかは自由が利くこともあるし、そうでないこともある。
レベルが上がれば上がるほどいろんなことができるようになって…
そんなことを感じながらアナデンのライザコラボを夢中でプレイしていました。
せっかくなら、思いっきりライザにあやかったWebページの在り方にしてみたいと思ったんだよね。
ライザの 「何を入れるのがいいかなぁー・これでいいかな!・やったぁー! できた!」 という3段階のセリフは、何かをクリエイトする時の人間の気持ちそのまんまだと思うのですよ。
時間が経っても役に立つWebページって、どういうものでしょうね?
何を入れるのがいいかなぁー
HTML・CSS・JavaScript・Python・Lua、Google Cloud App Engine・Azure Static Web Appsなどなど。
Web制作に使える材料はたくさんあります。
その中から必要なものを選んで錬成していく過程は、ライザごっこにぴったりじゃない?!
これでいいかな!
ちゃんと裏ボスなりストーリーなり、直接ゲームのことも書いてありますよ。
フォロワーさんの中には「忙しくてまだプレイできていない…」という人もいたから、まずはWeb制作について書いていました。
何より私がライザごっこやりたくて仕方なかったからね😆ww
錬金術はファンタジーですが、Web制作と重なる部分がとても多いと感じるんだよ。
大きな鍋がWebサーバーだもん。
ゲーム部分の攻略情報などは、時間を経るとどうしても色褪せてしまいます。
ライブサービスゲームだからそれは仕方ないんだけど、旬なうちに楽しむということは、旬が過ぎればそれまでということでもある。
ネタバレの懸念も薄まるように、そして自分にとって良い思い出となるように、時間の経過を見つつ順次ゲームネタを加えていきました。
やったぁー! できた!
このサイトを構成しているソースコードは、学生時代の勉強ノートから引っ張ってきたものです。
当時はコードを書けても、私がフロントエンド・バックエンドの関連性を十分に理解できておらず、実装することができなかったものもありますよ。
Pythonなんか自分のパソコンで動作させるのが精一杯。
こうしてWeb公開にまで至らなかった。
このWebサイトは、ソースコードとシステムを分けて管理しています。
昔の私が困ったところは、これから個人サイトを作ろうとする人も困るポイントかと思うのです。
このサイトの運用実績を残しつつ、いろんな人の参考になるような仕組みとしていきたいですね。
画像の管理・バックアップ
個人用GoogleアカウントとWeb公開用Googleアカウントを分けています。
その上でデータ共有はアルバム共有機能等を使い、必ず一手は手作業を挟まないとWebに公開できません。
誤操作による画像投稿事故を避けるためです。
開発環境データはOneDriveと連携し、意識せずとも常時バックアップできている仕組みとしています。
人間は必ずミスをするので、そもそもミスができないルートを決めちゃうのが私のやり方です。
システムと言っても区分は難しいですけどね?
ソースコード以外についてまとめています。
このアプリがデプロイされているのは、Google App Engineです。
app.yamlの詳しい説明は「App Engineのapp.yamlでWebサイトを設定する」にあります。
クラウドとは、インターネットを通じてサーバ・ストレージ・データベース・ネットワークなどを提供するサービスのことです。
このおかげでユーザーは物理的なサーバを所有・管理せずに、必要なときに必要なリソースを利用することができます。
重要なのは、リソースのスケーラビリティなんですよ。
需要に応じてサーバのスペックを自動的に調整することが可能です。
例えば、ウェブサイトにアクセスが急増した場合、クラウドプロバイダーは自動的にリソースを追加して対応します。
逆にアクセスが減少した場合には、リソースを削減してコストを節約することもできます。
クラウドを利用することで、従来の物理サーバを管理する負担から解放されるとともに、柔軟かつ効率的にリソースを利用できるようになるのです。
参考サイト:ISMAPクラウドサービスリストを公開しましたデジタル庁
My favorite PC
もう10年くらいかな…
低スペックのパソコンしか使ってないです。
上述のようなクラウドが注目されている今、個人でハイスペックパソコンを購入する必要がある状況は限られたものかと。
fein's portalを作っていた時なんか、eMMC (embedded
MultiMediaCard) でさえなかったですね。
memo
Using VS Code, search for class="codegra".
class="gra" is a representation that mimics a heading.
Google Sites resumed on July 4, 2023.
Google Cloud started on September 15, 2024.
このページは、少女趣味なキャラクターごっこそのものでしょう。
でも、自分でコードを書いて何かしらの開発をしたことがある人になら、おそらく私の意図が伝わるのではないかと思っています。
「私自身のコード管理」と「訪問者向けのコード解説」を両立させたUIとして、このページを機能させたかったんだよね。
キャラクターごっこの話ではなく、私がやりたかったことをきちんと説明するなら、次のようになります。
分かりやすい話だと思いませんか?
自分が書いてきたコードの説明文を、外部の人にも分かるようにちゃんと書く。
これは仕事の現場でもよく聞く「マニュアルの整備」に他なりません。
このページがあることで、外部向けに広大なWeb制作マニュアルを提供しつつ、私はソースコードのマニュアルをいつでも参照できるようになったわけです。
ソースコード同士の関係が、自分で分からなくなる。
数年前に自分で書いたプログラムを、忘れてしまう。
これがあるから新しいUIを作れなくなるし、結果としてUXが下がる。
Webサイトの超長期的な拡大と発展のために考案した、継続可能で自分自身にもメリットがあるこの仕組みを、改めて「Visual Atelier Code」と名付けます。
そしてこの仕組みを思い付くきっかけになったのが…ライザリン・シュタウトという、愛らしいキャラクターだったのですよ!
当WebサイトのREADME
Markdown記法で書かれた、このサイトの説明書です。
Markdown記法はHTMLより簡単な、構造化されたテキストファイルの書き方です。
#の数で見出しを作り、
|--|--|を組み合わせて表を作り、
*で箇条書きもできて、
によって画像の表示さえできます。
そんなに使用頻度は高くないけど、とても便利ですよ。
.docxなどのワープロソフトで書かれたファイルは、OSが変わるとうまく表示できなかったりします。
しかしMarkdown記法で構造化されたテキストファイルであれば、読みやすいレイアウトを維持したままOSを問わず表示されます。
HTML(HyperText Markup Language)はWebページの内容を構造化するためのマークアップ言語ですが、これと似ていますね。
Markdown記法で書かれたテキストは、とっても簡単にHTML文書にすることもできる。
だからWebページの下書きとしても便利に使えます。
2025年3月より、当サイトのURLが https://feinatelier.org/ となりました。
.orgドメインは個人でも取得でき、信頼性や信憑性が高いと認識されています。
福祉や教育など非営利活動、ITネタで言うならオープンソースプロジェクトなど、公益性の高い方向を持っている情報提供サイトに向いているドメインだから、第一印象が良いのですよ。
平たく言うと、私はWebサイトをマネタイズする予定がありません。
かつ、こうして個人サイトを構築できるソースコードを公開し、解説しています。
それなら非営利+オープンソースということで、.orgドメインがピッタリなんだよね。
これが当サイトのリダイレクト設定を管理するコードです。
下記に「アナザーエデン・ファンサイトのご案内」というセクションがあります。
例えばこういったサイトに独自ドメインを設定したいと考えた時、どのような手順と注意点があるでしょうか。
独自ドメインはお金がかかります。
注意したい独自ドメイン設定手順とルール には、このように個人サイト制作で話題になりやすい事柄についても、併せて記載しています。
これは、私がTwitterにあった各種のコンテンツを全てWebサイトへ移行させた時に作ったものです。
ゲームについて個人サイトを作ろうということなら、ここにあるだけで十分かと思いますね。
PDF本体をご覧になりたい方はアナザーエデン・ファンサイトのご案内.pdf版をどうぞ。
でも上部のプレビューでも十分かと思います。
このページにも使われている、コンテンツをぎゅっと濃縮できるUIです。
詳しい説明とソースコードは、次のリンク先にあります。
Pythonは最近とても人気がありますね!
これはいくつかの理由がありますが、特に機械学習とデータサイエンスの分野での利用が大きな要因となっています。
ただ、もともとPythonはそのシンプルで直感的な構文、豊富なライブラリ、そして活発なコミュニティサポートのおかげで幅広い層に利用されていたんですよね。
例えばCopilotやGeminiのようなAI(人工知能)も、Pythonと密接に関連しています。
Pythonは機械学習・データ処理・自然言語処理などのライブラリが整っていることでAI開発の主要なツールとなっており、書店にも関連書籍が増えているのです。
しかし、Pythonだけ書けても、AI開発ができるわけもなく…
このアプリケーションがデプロイされている Google Cloud では、AI開発が非常に活発に行われています。─ もちろん Microsoft Azure や Amazon Web Services でも ─
「Google CloudのAI開発プラットフォーム」などという言い方をしますね。
特にアナデンユーザーなら、Vertex AI という Google Cloud のプラットフォームに注目してみてはいかがでしょう?
【Google Cloud Next Tokyo 24】Vertex AI Search を使った社内向け AI チャット サービスの構築
というページをご覧いただくと、株式会社WFSの先進的な試みについて読むことができます。
各ゲームタイトル担当者の生産性向上を目的として、AI開発をしたみたいですね。
これは凄いことだと思います。
WFSは最先端の情報技術を使っていることになる!
あ、そうそう…
Vertex AIはAIプロジェクトの構想からデプロイまでをカバーする、コードベースのデータサイエンス開発プラットフォームです。
さて、このようにAIとクラウドというのは、いろいろと関連しているのです。
プログラミングを考えるときに欠かせないのが「ライブラリ」です。
ライブラリとは、特定の機能や操作を簡単に実行するための、再利用可能なコードの集まりを意味します。
ライブラリを使うことで、開発者はゼロからすべてのコードを書く必要がなくなり、効率的にプログラムを作成することができます。
例えば上述のように、機械学習やデータ処理、自然言語処理など、さまざまな分野で役立つ関数やクラスがまとめられているライブラリがPythonにはたくさんあります。
これらのライブラリを使うことで、特定のタスクを素早く実行できるようになるってことだね。
ライブラリはプログラム開発を効率化するための便利なツールセットであると言ってもいい。
例えばこのサイトで使っている Prism.js はコードハイライト用のライブラリです。
軽量で効率的に動作し、さまざまなプログラミング言語のコードをシンタックスハイライトすることができます。
これを使うことでコードの可読性が向上し、開発者がコードをより簡単に理解できるようになります。
ソースコードの色分け表示なんか、いちいちCSSで細かく設定するなんて大変だよ…
こういうポイントでライブラリを使うんです。
こんな感じで、綺麗にプログラムコードが表示されているでしょ?
アナザーエデンのプログラミングを個人サイトで試すで書いた、アナザーエデンで使われているプログラミング言語「Lua」のソースコードです。
const luaCode1 = `
local items = {
{name = "アナザーエデン", link = "https://another-eden.jp/"},
{name = "ヘブンバーンズレッド", link = "https://heaven-burns-red.com/"},
{name = "WRIGHT FLYER STUDIOS", link = "https://www.wfs.games/"}
}
local dropdownHtml = ""
for _, item in ipairs(items) do
dropdownHtml = dropdownHtml .. '<a href="' .. item.link .. '">' .. item.name .. '</a>'
end
return dropdownHtml
`;
お次はプログラミング言語「Python」のソースコードです。
ちょっと変則的かもしれませんが、このアプリでタブUIを動作させるときに使っています。
from browser import document, timer
def show_tab(event):
container = event.target.closest('.atelier-container')
tabs = container.select('.atelier-tab')
contents = container.select('.atelier-tab-content')
for tab in tabs:
tab.classList.remove('atelier-active-tab')
for content in contents:
content.classList.remove('atelier-active-content')
content.style.transition = 'transform 1s ease-in-out, opacity 1s ease-in-out'
content.style.transform = 'translateX(-100%)'
content.style.opacity = '0'
content.style.visibility = 'hidden'
event.target.classList.add('atelier-active-tab')
tab_id = event.target.getAttribute('data-tab')
active_content = container.select(f'[data-content="{tab_id}"]')[0]
active_content.classList.add('atelier-active-content')
def show_content():
active_content.style.visibility = 'visible'
active_content.style.opacity = '1'
active_content.style.transform = 'translateX(0)'
timer.set_timeout(show_content, 50)
for container in document.select('.atelier-container'):
tabs = container.select('.atelier-tab')
if tabs:
tabs[0].classList.add('atelier-active-tab')
container.select('.atelier-tab-content')[0].classList.add('atelier-active-content')
for tab in tabs:
tab.bind('click', show_tab)
このようにライブラリを使うことで、私は余分な手間を省きつつも、見やすくソースコードをこのサイトに表示できています。
私のAIに対する指針についてお話しするなら、次の画像だけで十分かと思いますよ?
Google Cloud の Digital Leader という試験における、公式模擬試験からの出題となっております。
広い意味で、私の行動原則となっているものです。
Cloud Digital Leader のWebページにも詳細があります。
詳しくはX(旧:Twitter)の変化にどう対処するかの「生成AIに関する対応」という欄にあります。
詳しくは個人サイトをそのまんまアプリにする方法にて。
この見出し通りの状況なのですが、ここに詳しく書くのは無理ゲーだよ…
ちゃんと別にWebページが必要です。
一言お気持ち表明するなら、もう初めっからアプリ化するつもりでした。
だって今の時代、普通に考えてアプリのほうが有利じゃん。
必要なソースコードは manifest.json だけではなく、プログレッシブウェブアプリそのものが比較的新しい技術です。
そのため、次のソースコードをまとめて掲載しています。
BGMもいいし、ストーリーもぜんぜん無理がなくて、おまけにばっちり感情移入できて。
Twitterのタイムラインは後からさっと追いかけただけでしたが、大好評でしたね。
可能であれば、続編を強く希望したいです。
似たような雰囲気のRPG同士であるからか、アナザーエデンとライザのアトリエは自然に溶けあっていました。
戦闘システムも無理がないのですよ。
アナデンらしさも損なわず、ライザがまるで普通のアナデンキャラみたいに振る舞っています。
詳しくはWeb制作の技術でソフトウェアを作るにて。
こういう感じの、壁紙を極力邪魔しないテキストベースのランチャーです。
上の画像の右上のほう…透き通ったランチャーがあるの、見えますか?
これはアプリ化のように計画的なものではなく、完全な思い付きです。
ソフトウェア作りに凝ってた頃のソースコードが発掘されたことも大きい。
コード資産って…大切なんだと改めて思いました😅
これからもバージョンアップしていきましょう!
私以外にも、ルドヴィカのプレイアブル化を希望している人はたくさんいると思うのですが?
そういう意味でも、テイルズコラボみたいに続編をやって欲しいですね。
ライザの錬金術と、冒険に必要な道筋の開拓。
そしてストーリーの進捗と徐々に明らかになっていく古城の秘密。
これまでアナザーエデンはいろんなところとコラボしてきましたが、このライザのアトリエコラボが一番好きですね!
上述の私が作ったソフトウェアは、Electronという技術を使っています。
Electronというのは JavaScript、HTML、CSS を使って、Windows、Mac、Linuxなどの異なるプラットフォームで動作するデスクトップアプリを開発するためのフレームワークです。
例えば、ゲーマー向けのSNSである Discord は、Electronを使用して開発されたアプリケーションです。
マルチプラットフォームに対応しつつ、ネイティブアプリと同等のパフォーマンスを提供します。
あと、私が頻用している Visual Studio Code (VS Code) もElectronで作られているんですよ?
なんと、Web技術を使って高度な機能を持つ、開発者用のコードエディタまで作成できちゃうんですね。
当然のようにマルチプラットフォーム対応であり、いろんな拡張機能でユーザーがカスタマイズできる拡張性まで備えているのです。
Visual Studio Codeは、皆様もリスクなく気楽に触れます。
Visual Studio Code for the Web をどうぞ。
インストールしたソフトウェアとしての Visual Studio Code と、ほっとんど同じ操作感ですよ。
アナザーエデン、ライザのアトリエコラボおもしろかったですね!
ここから先はゲームそのもののお話です。
私はカルナジェネシスの影から真っ先に取り掛かったのですよ。
どーせなら錬成コンテンツを全て終わらせてからやれば良かったのかもしれませんが、「ひと夏の冒険者達の星譜」が入手できるとすればおそらく裏ボスだろうと考えました。
なかなかの難易度であったと記憶しているけど、ASソイラで敵の攻撃は原則受けるようにしていました。
固定ダメージもソイラで受けるのですが、私のソイラは天255なのでね…
HPバッジやらも盛った上での話ですよ。
オーラ等を見ると魔法パーティーが良さそうだったから、シェンファ+ASフィーネで攻めることにしました。
状態異常付与がとにかくめんどうなんだよね。
そこもASソイラで受けつつ、テトラで回復する流れを作ったかな。
んでもって復活するたびに攻撃が激しくなるから、ステラバーストとアナザーフォースのタイミングを考えるようにして。
シェンファのテッセラクト強いですよ。
相手のバフをひっくり返すタイミングがここでも重要だった。
シェンファとASフィーネは相性良いですよね。
倒してみたらなんと、「真・気鋭の錬金術士の証」が手に入ったのです。
真っ先にライザリンシュタウトのVCグラスタを入手できて大満足!
ちょうどこのページのコード管理を思い付いていたあたりでさ…
加えてSE職への部署異動+港町への引っ越しで多忙な時期だったから、ネタバレどころかTwitterもぜんぜん見る暇がなかった。
強敵戦の入手アイテムで驚けるのは、ネタバレ価値観+大暴れのコンボも良い仕事をしたものだと思ったね😆ww
ライザコラボは裏ボスも倒し、全てのコアアイテムも錬成済みです。
上述の通りライブサービスゲームの攻略記事というのはWebページ自体の寿命も短いので、攻略も簡素に済ませますよ?
星導覚醒実装後の敵でもあるし、すぐにインフレ頼みで倒せるようになります。
書きやすいし、箇条書きにしてみましょうか。
でも、私の場合はシェンファ・シュゼット・マリエル・ガリアード・クラルテともに天冥255です。
デバフ耐性グラスタも腕速知・属性・物理の3つを完備できたこともあるでしょう。
長く続けてればね。
頻用するキャラに関しては、自ずと255になっていたりするもんです。
倒した当時のアナザーフォースを再現しました。
ライザの天が上がっているのと、細かい装備を覚えておらず、まったく同一とはいかなかったけど。
でもだいたい同じです。
This is a video on Google Drive.
倒すとクラウディアの真・VCグラスタがもらえますよ。
クラウディアもどこかで天255にしようかな🎵
2024年12月から2025年1月にかけて、上述のようにすっごく忙しくて💦
この闇のアルターフォースにしても、新幹線の中でプレイしていたような記憶がありますね。
Twitterは皆様のネタバレ価値観を尊重することが優先ですから、スマホを開くときにはだいたいライザコラボという状態😆ww
なので、早期にいろいろクリアできました。
私はいつもそうですが、ネタバレ・センシティブ期間中はSNSに浮かないほうが、ゲームに集中できますよ?
別に配信後すぐに片っ端からクリアしなくても良いけど🥱
今にして思えば、あのスクショやこのスクショを残しておけば良かったなどと考えているところです。
ソースコードや記事資産が手元にない場合、Webサイト制作は大仕事となります。
また、SNSでは「俺のほうがもっとスゲェことできる!!」というドヤりあいが頻繁に発生し、そういう風土が知識&技術を習得する際の妨げとなります。
特にこうして自らコードを書いてWebアプリケーションを構築していくような「Web開発」の領域に首を突っ込んだ場合、SNSからくる競争意識の悪影響を受けていると、学びも遊びも中途半端になってしまう…
大いにゲームで遊び、大いに自分の学びを進められる環境を作るためにもね?
単純作業は極力パソコンにやってもらった方が良いでしょう。
このページからジャンプできるソースコードはWeb開発に必要な知識のうちのほんの一部に過ぎませんが…
誰かの役に立てば嬉しいです🎵
全ページをリスト化したサイトマップも用意していますが、けっこうなページ数があります。
下記の「カテゴリー分けサイトマップ」のほうが使いやすいでしょう。
アナザーエデンの強敵戦やストーリーコンテンツのリスト、お勧めバッジなどを掲載したコーナーです。
期間限定のない普通のRPGですので、初心者でも安心して続けていけるゲームとなっています。
もっとも重要なグラスタについては、場所別に網羅した表があります。
個人でウェブサイトを作るにはどうすればいいか。
HTML・CSS・JavaScriptの書き方はもちろん、無料かつ広告なしでホームページを作る方法を掲載したコーナーです。
Webデザインやレイアウトについても書いてあります。
ゲームとパソコンだけじゃなく、アウトドアも趣味なんです。
このコーナーでは魚釣りの記録とか、魚料理のレシピ、はたまたサイクリングなどなど。
アウトドアに関連するコンテンツが詰め込まれています。